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 的遍历采用的是二叉树的中序遍历:左子树—-根节点—-右子树