Collection 接口是Iterable的子接口,该接口下的子接口是List和Set
List: 可重复,有序
常用的List的实现类:ArrayList、 Vector、LinkedList
ArrayList:
异步、查询速度快、增删速度慢、不安全、基于数组、可重复、有序,其中顺序是存储的顺序。
ArrayList 是一个对象数组,每次增加的时候 会为数组扩容,数组长度是不能改变的,每次扩容数组内容拷贝的工作 ,ArrayList如果频繁增加内容,效率不高, 但是查询的时候由于底层使用的是数组,所以查询效率会高,发现自定义类的时候,必须覆写equals方法才能完成集合中 对象查找和删除,主要原因是在于进行对象删除或者查找的时候 集合中会判断传入的元素和集合本身的元素是否是内容相同的元素 只有相同才会删除或者查找
Vector:
同步的,查询速度快,增删速度慢,安全
LinkedList:
查询速度慢、增删速度快、基于链表
Set:不可重复
常用的set的实现类:TreeSet、HashSet
TreeSet:
有序、不可重复
1.为什么TreeSet能实现有序?
TreeSet的排序是通过compreable 接口中的compareTo方法完成的 该方法返回 3个取值
分别为: 1 升序 - 1 降序 0 重复元素的判断
TreeSet中进行保存的时候,约定存储的类型必须实现一个接口,而这个接口就是comparable接口,如果没有这个接口则不能实现排序功能
2.不可重复
重复元素的区分 在TreeSet中是依靠compareTo方法是否返回0来判断
HashSet:
HashSet是set的实现类中使用最多的一个实现类、无序、不可重复、通过hashcode和equals方法判断重复元素
HashCode通过一些运算把复杂的对象,主键,转换为数组的下标arrayindex进行存储
HashCode设计原理的三大特性:
1.确定的,hashcode值是一定的,对象.hashCode 该对象无论调用多少次这个hashCode方法得出的结果 一定是一样的
2.高效的 哈希算法一定不能是复杂的
3 均匀分布的
Map接口,是独立于Collection的接口
常用的Map实现类有 HashMap、HashTable、LinkedHashMap、TreeMap
HashMap:
在hashMap中 Key值是不能重复的, value是可以重复的, 如果出现了相同的key 之前的key 会被覆盖掉,其实对于put的方法也是存在返回值的 当存储的key在map集合中不存在则返回null 如果存在相同的key 返回上一个相同key的value,无序
HashMap在集合的使用中是最常用的,但是它的特点是存放的数据是无序的,而如果现在想要存放的数据为有序的map集合 则可以使用LinkedHashMap完成 (有序 存放的顺序)既然是链表的保存,其保存的数据量一般不会太大
HashTable:
HashTable 线程安全 同步处理 效率低 key 和 value 都不允许为null
LinkedHashMap:
HashMap 非线程安全, 异步处理 效率高 key 和 value 都允许为null
TreeMap:
可以按照key进行排序,使用这个类的时候一定要配合一个接口:Comparable 接口
Map.Entry接口:
在Map集合中 key是不可重复的,treeMap 有序的 HashMap 是无序的 和Set集合非常的相似 key底层和set实现的原理是一样的 所以实际上map和set是可以相互转换的
Map.entry 里面存放的是 key value