集合

集合只能存储引用数据类型

COllection

集合

方法:

集合

迭代器的使用遍历集合:

Iterator<Person> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

List实现类

  • ArrayList【重点】(开辟连续空间)

    • 数组解构实现,查询快,增删慢

    • 线程不安全,运行效率快

    • 默认容量是10

    • 注意:如果没有向数组添加元素,默认容量就为0,一旦添加元素,默认容量就变为10

      ​ 另外,他每次扩容都是原来的1.5倍

  • Vextor

    • 数组结构实现,查询快,增删快
    • 线程安全,运行效率慢(相对于ArrayList)
  • LinkedList(无需开辟连续空间)

    • 链表解构实现,增删快,查询慢

Set实现类

特点:无序(输入输出元素顺序可能不同),无下标,不能重复

只能使用增强for与迭代器两种方法遍历

  • HashSet【重点】
    • 基于HashCode计算元素存放位置
    • 当存入元素哈希码相同时,会调用equals进行确认,如果为true,则拒绝后者存入
  • TreeSet
    • 基于排列顺序实现元素的不重复
    • 实现了SortedSet接口,对集合元素自动排序
    • 元素对象的类型必须实现Comparable接口,指定排列顺序
    • 通过CompareTo方法确定是否为重复元素

Map

集合

特点:存储一堆数据,无序、无下标,键可以重复,值不能重复

方法:

集合

集合

HashMap【重要】

初始容量16

加载因子为0.75(当容量用到初始容量的百分之七十五就开始扩容)

集合

总结:

  • HashMap刚创建时,table为null,为了节省空间,当添加第一个元素时,table容量调整为16
  • 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容大小为原来二倍。目的是减小调整元素个数
  • jdk1.8 当每个链表长度大于8,并且元素个数大于等于64时,会调整为红黑树,,目的时提高执行效率
  • jdk1.8 当链表长度小于6时,调整成链表
  • jdk1.8 以前,链表时头插入,jdk1.8 之后是尾插入
上一篇:为什么list不能使用全局sort函数


下一篇:Standard Template Library(STL,标准模板库)