集合类

存放于Java.util包中,主要有3种:set(集)、list(列表包含Queue)和map(映射)。

  1. Collection:Collection是集合List、Set、Queue的最基本的接口。
  2. Iterator:迭代器,可以通过迭代器遍历集合中的数据
  3. Map:是映射表的基础接口

java中的list

  1. arrayList
    • 排列有序,可重复
    • 底层使用数组
    • 查询快,增删慢
    • 空间不足时,默认拓展当前容量的*1.5 +1
    • 非线程安全
  2. Vector
    • 排列有序,可重复
    • 底层使用数组
    • 查询快,增删慢
    • 空间不足时,默认拓展当前容量的一倍容量
    • 线程安全,效率低
  3. LinkedList
    • 排列有序,可重复
    • 底层使用双向循环链表数据结构
    • 查询数据慢,增删快
    • 非线程安全

Java中三种Set类型

Set接口的特性,Set接口继承了Collection接口,Set集合中不能包含重复的元素,每个元素必须是唯一的,你只要将元素加入set中,重复的元素会自动移除。

  1. hashSet
    • 排列无需,不可重复
    • 底层使用hash表实现
    • 存取速度快
  2. TreeSet
    • 不可重复,但是排列有序
    • 底层使用二叉树实现
    • Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自己定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数,才可以正常使用·
    • 在覆写compare()函数时,要返回相应的值才能使TreeSet按照一定的规则来排序
    • 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
  3. LinkedHashSet
    • hash表存储,双向链表记录插入顺序
    • 内部是linkedHashMap

总结一下,如过你的需求是要一个能快速访问的Set,那么就要用HashSet,如果你要一个排序Set,那么你应该用TreeSet,如果你要记录下插入时的顺序时,你应该使用LinedHashSet。

Java中Map

  1. HashMap
    • 根据键的HashCode 值存储数据,根据键可以直接获取它的值
    • 访问速度快
    • 最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null
    • 非同步
  2. TreeMap
    • 能够把它保存的记录根据键(key)排序,默认是按升序排序
    • 不允许key的值为null
    • 可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的
    • 在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。
    • 非同步
  3. Hashtable
    • 写入时会比较慢
    • key和value的值均不允许为null
    • 线程同步,任一时间只有一个线程能写Hashtable
  4. LinkedHashMap
    • 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.
    • key和value均允许为null
    • 遍历比HashMap慢
    • 非同步