List接口:存放元素有序、可重复。

这里的有序指的是集合中存放元素的顺序与添加元素的顺序一致,并且自带索引

ArrayList类:底层结构是数组结构,查询元素的效率比较高,增删元素的效率比较低。线程不安全,效率高。

LinkedList类:底层结构是链表结构,查询元素的效率比较低,增删元素的效率比较高。了解链表结构

Vector类:底层结构是数组结构,查询元素的效率比较高,增删元素的效率比较低。线程安全,效率低。

 

Set接口:存放元素无序、不可重复。

这里的无序指的是集合中存放元素的顺序与添加元素的顺序无关,不带索引,但集合中存放元素的顺序不是杂乱无章,是按照hashcode来排序的

HashSet类:底层结构为哈希表,向HashSet添加元素E时,系统会先比较E和已有元素的hashCode()的返回值,如果不相同,则认为两个元素不相同;如果相同,则再调用equals(),如果返回false,则认为两个元素不相同,如果返回true,则认为两个元素相同,E和已有元素挨个按照这种规则比较,如果都不相同,则可以添加E。元素允许为null

TreeSet类: 底层结构为二叉树,TreeSet中添加的元素类型要一致,且具备可比性

可比性:

1.自然排序。待排序的类可以修改时,让本没有可比性的这个类实现Comparable接口,重写compareTo(Object o)方法,使其具备可比性,归根结底是比较该类中具有可比性的属性。(待排序的类自带比较规则)
2.定制排序。待排序的类无法修改时,额外创建一个实现Comparator接口的类,重写compare(Object o1, Object o2)方法,其对象用作某些方法的参数。(额外制定比较规则)
       

Java中TreeSet 的遍历采用的是二叉树的中序遍历:左子树—-根节点—-右子树

java中List 接口获取长度的方法_数组