集合类
存放于Java.util包中,主要有3种:set(集)、list(列表包含Queue)和map(映射)。
- Collection:Collection是集合List、Set、Queue的最基本的接口。
- Iterator:迭代器,可以通过迭代器遍历集合中的数据
- Map:是映射表的基础接口
java中的list
- arrayList
- 排列有序,可重复
- 底层使用数组
- 查询快,增删慢
- 空间不足时,默认拓展当前容量的*1.5 +1
- 非线程安全
- Vector
- 排列有序,可重复
- 底层使用数组
- 查询快,增删慢
- 空间不足时,默认拓展当前容量的一倍容量
- 线程安全,效率低
- LinkedList
- 排列有序,可重复
- 底层使用双向循环链表数据结构
- 查询数据慢,增删快
- 非线程安全
Java中三种Set类型
Set接口的特性,Set接口继承了Collection接口,Set集合中不能包含重复的元素,每个元素必须是唯一的,你只要将元素加入set中,重复的元素会自动移除。
- hashSet
- 排列无需,不可重复
- 底层使用hash表实现
- 存取速度快
- TreeSet
- 不可重复,但是排列有序
- 底层使用二叉树实现
- Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自己定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数,才可以正常使用·
- 在覆写compare()函数时,要返回相应的值才能使TreeSet按照一定的规则来排序
- 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
- LinkedHashSet
- hash表存储,双向链表记录插入顺序
- 内部是linkedHashMap
总结一下,如过你的需求是要一个能快速访问的Set,那么就要用HashSet,如果你要一个排序Set,那么你应该用TreeSet,如果你要记录下插入时的顺序时,你应该使用LinedHashSet。
Java中Map
- HashMap
- 根据键的HashCode 值存储数据,根据键可以直接获取它的值
- 访问速度快
- 最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null
- 非同步
- TreeMap
- 能够把它保存的记录根据键(key)排序,默认是按升序排序
- 不允许key的值为null
- 可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的
- 在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。
- 非同步
- Hashtable
- 写入时会比较慢
- key和value的值均不允许为null
- 线程同步,任一时间只有一个线程能写Hashtable
- LinkedHashMap
- 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.
- key和value均允许为null
- 遍历比HashMap慢
- 非同步