Java Collection集合小结
Collection集合
只能存储引用类型的数据, 单个存储
尽管有时我们看到存储基本数据类型的数据,但实际存储的依旧是引用类型的数据,因为基本类型的数据已经被java的自动装箱机制转换为引用数据类型的数据了。
基本操作: add(), remove(), contains(), size(), iterator()
是size()不是length();
List集合
特点: 存储的元素是有序,可重复的
有序指的是添加元素的顺序和存储元素的顺序是相同的;
为每个元素指定一个索引值
增加的方法, 针对索引值的操作, listIterator(), subList(), sort(Comparator)
ArrayList集合
底层是数组, 访问快, 添加/删除效率低
访问之所以快是因为数组中存储的数据类型是惟一的,并且知道数组的首元素地址,我们可以通过公式计算出要访问的元素的内存地址,从而提高了效率,无需遍历。
添加删除之所以效率低是因为数组中的元素需要进行大量的移动,如果是在数组的末尾添加或者删除元素效率并不低。
初始化容量: 10, 扩容: 1.5倍
Vector集合
底层是数组, 它是线程安全的, ArrayList不是线程安全的
初始化容量: 10, 扩容: 2倍
LinkedList集合
底层是双向链表, 添加/删除效率高, 访问慢
之所以访问比较慢是因为每次访问都需要遍历整个双向链表
List集合应用场景
ArrayList适用于以访问为主, 很少添加/删除的情况
LinkedList适用于经常添加/删除的情况
Set集合
特点: 数据无序,不可重复
HashSet集合
底层是HashMap, HashSet实际上就是HashMap键的集合
TreeSet集合
底层是TreeMap, TreeSet实际上就是TreeMap键的集合
TreeSet实现了SortedSet接口, 可以对元素自然排序, 要求元素必须是可比较的:
● 在构造方法中指定Comparator比较器对象
● 如果没有Comparator比较器, 集合元素的类必须实现Comparable接口
Set集合的应用场景
如果不需要对Set集合进行排序就选择HashSet
如果需要对Set集合的元素进行排序就选择TreeSet
注意:
List集合/HashSet集合的contains( e ) / remove( e )等方法需要调用对象的equals()方法, 这些集合中的元素的类需要重写equals()方法
TreeSet集合中contains( e )/ remove( e) 等方法判断是否同一个对象是根据Comparator/Comparable的比较结果是否为0来判断的, 如果比较结果为0表示同一个元素