学习Java的第16天

学习Java的第16天

1.Java集合框架的概述

  1. 集合和数组都是对多个数据进行操作的结构,简称Java容器。

    此时的存储主要指的是内存的存储,不涉及到持久化的存储。

  2. 数组存储多个数据的特点:
    • 一旦初始化以后,数组的长度就确定了。
    • 声明类型后,元素的类型也就确定了。
    • 缺点:
      • 不可以修改长度。
      • 数组提供的方法非常有限,对于添加,删除,插入数据等操作十分不便。
      • 获取数组实际元素的个数的需求,数组没有现成的方法可以用。
      • 数组存储数据的特点:是有序的,可重复,对于无序,不可重复的需求,不可满足。
  3. Java集合可分为Collection和map两种体系。
    • collection接口:单例数据,定义了存取一组对象的方法的集合

      • List:子接口:元素有序,可重复的集合。
      • Set:子接口:元素无序,不可重复的集合。
    • Map接口:双列数据,保存具有映射关系的key—value的集合

2.集合框架

  1. |----collection:单例集合,存储一个一个的对象。

    ? |-----list:存储有序,可重复的数据。//动态数组

     		|-----实现类:Arraylist Vector LinkList
    

    ? |------set:存储无序的,不可重复的数据。//

    ? |-----实现类hashSet,LinkHashMap,TreeSet

    |-----map:双列集合,用来存取一对的数据。一一对应//y= f(x)

    ? |-------HashMap,LinkHashMap,tree,Hashtable,propeties

3.Collection接口中的方法的使用

注意:在添加对象时,要重写类中的equals方法
  1. size(): 获取元素的个数。

4.集合元素的遍历操作,使用迭代器Iterator接口

  1. 遍历集合的格式:

       @Test
        public void test1(){
            Collection c1 = new ArrayList();
            c1.add(123);//自动装箱
            c1.add(new String("小米最垃圾"));
            System.out.println(c1);
            Iterator iterator = c1.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    
  2. 内部定义了remove()可以在迭代的时候删除集合中的元素。
    • 不能连续两次调用迭代器中的remove()。

5.增强for循环

  • 利用迭代器赋值不会改变集合内部元素的值

6.List接口的概述

  1. List的三个实现类异同:

    1. ArrayList :线程不安全,效率高,底层使用Object[]
    2. LinkList: 底层使用的是双向链表。有利于频繁的遍历。
    3. vector:线程安全,效率低。底层使用的是Object[]
  2. 三个实现类的源码分析
    1. ArrayList:jdk7中底层先造一个10的数组 之后不够了,在按照当前数组长度的1.5倍去扩容,jdk8中先初始化为0,添加时在初始化为10,相比较于之前比较节省内存空间。
    2. LinkList:底层是用双向链表实现的。
    3. Vector:底层也是构造了一个10的数组,当长度不够时,增加长度为当前的2倍。

7.Set接口

  1. Set存储的无序性和不可重复性

    • 无序性:利用hash值通过算法算出具体位置.
    • 不可重复性:
  2. 添加元素的过程
    • 我们在向HashSet中添加元素a,首先调用a所在类的HashCode()方法,计算出元素的哈希值,此哈希值接着通过某种算法算出在HashSet底层数组中的存放位置
    • 判断此数组的该位置是否有元素存在,没有则直接添加.
    • 如果此位置上有其他元素b(或以链表形式存在的多个元素),则比较元素a和b的hash值,如果hash值不同,元素a添加成功,如果相同就通过Equals()方法比较,如果相同就添加失败。
    • 注意指定位置上的如果存在多个不同hash值的数据,按照链表的形式存储 jdk8是后继存储 jdk7是前驱存储。
  3. LinkHashSet作为HashSet的子类,在添加数据的同时,每个数据还添加了两个指针,记录了前一个数据的地址和后一个数据的地址。
  4. TreeSet的使用:
    • 1.向TreeSet中添加的数据,要求是相同类的对象。
    • 2.并且按照指定方法排序。列如int按照从小到大。
    • 3.在自定义类中可以通过实现Comparable接口,重写compara方法,来进行自然排序,comparaTo():返回值为0,那么相同.

8.Map接口

  1. Map的实现类
  • HashMap():Map的主要实现类, 线程不安全的,效率高.可以存储null的key和value.

    • 底层:数组+链表+红黑树
  • LinkhashMap:保证在遍历map元素时,可以按照添加的顺序遍历
    • 对于频繁的遍历操作,效率较高.
  • HashTable():线程安全的,效率低.不可以存储null的key和value.
  • TreeMap:可以保证按照添加的key_value对进行排序,实现排序遍历. 底层使用的是红黑树.
    • 添加的key_value必须是同一个类的key,因为要按照key来排序
  • properties:常用来处理配置文件. key_value都是String类型.
  1. Map结构的理解

    • Map中的key,无序的不可重复的,使用set存储所有的key.
    • map中的value:无序的,可重复的,使用Collection 存储所有的Value
    • 一个键值对构成了一个Entry对象.
    • Map中的Entry: 无序的,不可重复的,使用Set存储所有的Entry
  2. HashMap的底层实现原理

  3. TreeMap
    • 可以自定义排序通过实现comparable接口

9.Collections工具类的使用

  • Collections 是一个操作 Set、List 和 Map 等集合的工具类
  • Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作, 还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
  • Collections 类中提供了多个 synchronizedXxx(list) 方法,将线程不安全的ArrayList和HashMap变成安全的.

原文地址:https://www.cnblogs.com/wumingzhibei/p/12598841.html

时间: 2024-10-02 02:58:04

学习Java的第16天的相关文章

《深入Java虚拟机学习笔记》- 第16章 控制流

<深入Java虚拟机学习笔记>- 第16章 控制流

2015第16周六学习java建议

学习Java 建议: 尽量用 google 查找技术资料. 有问题在 stackoverflow 找找,大部分都已经有人回答. 多看官方的技术文档. ibm developerworkers 的文章质量整体上有保障. 平时花一些时间在 github 上阅读优秀项目源码. 入门(1-2 个月) 目标:参与简单的项目开发. 技能: 掌握 Java.经典的<Java 核心技术:卷1 基础知识>(或者<Java 编程思想>)必看,跳过其中的图形和 applet 章节.习惯查阅 Java A

学习Java的16个阶段(转)

java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以java并不是单机版的,只是面向对象语言.建议如果学习java体系的话可以这样去学习: 第一阶段:Java基础,包括java语法,面向对象特征,常见API,集合框架: 第二阶段:java界面编程,包括AWT,事件机制,SWING,这个部分也可以跳过,用的时候再看都能来及: 第三阶段:java API:输入输出,多线程,网络编程,反射注解等,java的精华部分: 第四阶段:数据库SQL基础,包括增删改

学习Java需要达到的25个目标

本文将告诉你学习Java需要达到的25个目标,希望能够对你的学习及找工作有所帮助.对比一下自己,你已经掌握了这25条中的多少 条了呢? 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是 class,object,interaction以及statediagrams. 2.你需要学习Java语言的基础知识以及 它的核心类库 (collections,serialization,streams,networking,multi

零基础学习java:变 量(一)

一.变量的概念: (1)内存中的一个存储区域 (2)该区域有自己的名称(变量名)和类型(数据类型) (3)Java中每个变量必须先声明,后使用 (4)该区域的数据可以在同一类型范围内不断变化 使用变量注意: (1)变量的作用域:一对{ }之间有效 (2)初始化值 定义变量的格式:数据类型    变量名  =  初始化值 二.变量的分类--按数据类型 对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间. 1.整数类型:byte.short.int.long Java各整数类

学习JAVA应该去的20个英文网站(java学习网站)

学习JAVA应该去的20个英文网站(java学习网站)  1. http://www.javaalmanac.com     Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.  2. http://www.onjava.com     O'Reilly的Java网站. 每周都有新文章.  3. http://java.sun.com     官方的Java开发者网站 - 每周都有新文章发表.  4. http://www.developer

学习Java基础的一些收获一(this、static、super、final)

Java语言中This关键字应用浅析 应用一:引用成员变量 public class Student{ //定义一个类,类的名字为student. public Student(){ //定义 一个方法,名字与类相同故为构造方法 this(“luobo”) //这个this就是调用了下面的有参数的构造方法 } public Student(String name){ //定义一个带形式参数的构造方法 } } 如上面这个代码中,有一个成员变量name.同时在方法中有个形式参数,名字也是name.然

推介一个学习JAVA的系列教程-狗鱼IT教程

介绍一个学JAVA的零基础学习JAVA的网站,推介一个学习JAVA的系列教程-狗鱼IT教程 下面是java的系教程: 1?[java教程]Java 教程 2?[java教程]Java 简介 3?[java教程]Java 开发环境配置 4?[java教程]Java 基础语法 5?[java教程]Java 对象和类 6?[java教程]Java 基本数据类型 7?[java教程]Java 变量类型 8?[java教程]Java 修饰符 9?[java教程]Java 运算符 10?[java教程]Ja

Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

概要 这一章,我们对HashSet进行学习.我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括:第1部分 HashSet介绍第2部分 HashSet数据结构第3部分 HashSet源码解析(基于JDK1.6.0_45)第4部分 HashSet遍历方式第5部分 HashSet示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3311252.html 第1部分 HashSet介绍 HashSet 简