Collection接口
子接口有List接口和Set接口,List接口的主要实现类有ArrayList、LinkedList、Vector;Set接口主要实现类有HashSet、LinkedHashSet、TreeSet
List接口的特点:存储的数据有序,可重复==>“动态数组”
- ArrayList:底层代码数组实现,线程不安全,效率高,查询快
- LinkedList:底层使用双向链表实现,插入删除比ArrayList快
- Vector:古老的List实现类,底层代码数组实现,线程安全,效率低
Set接口的特点:存储的数据无序,不可重复(无序性不是指数据存入时随机存储位置,以HashSet为例,存储的数据不时按照底层数组的索引插入,而是以哈希值根据算法算出的索引位插入)
- HashSet:作为Set的主要实现类,线程不安全,可以存储null值,
- LinkedHashSet:作为HashSet的子类,遍历当中数据时可以按照插入的顺序输出
- TreeSet:要求当中插入的数据要为同一类,可以按照类中的制定属性进行排序
HashSet中插入的类需要重写equals方法和重写hashcode,因为HashSet实现不可重复性对比插入对象是否一致现比较hashcode值是否一致,一致再调用equals方法比较,如果equals方法返回true则不插入,返回false则再该索引值上创建一个链表与索引值相连。
LinkedHashSet在插入数据时还维护了两个引用,用来记录前一个数据和后一个数据,优点:对于频繁的遍历操作比HashSet高
TreeSet排序两种方式:①插入的类实现Compareable接口,自然排序②在创建TreeSet时传入Comparator的匿名实现类对象,在匿名实现类中重写compare()方法,实现排序
!!!TreeSet当中比较插入的对象是否相等就是依据排序方法(Compare和CompareTo)的返回值,返回0就认为一致,不插入,而不是和HashSet一样根据equals()方法