集合
list
ArrayList
01,list实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的 效率比
较高
02,List接口存储的是一组不唯一(可以重复),有序(插入顺序)的对象
List list = new ArrayList () ; //初始化长度为10
list . add (11) ; //这时候集合会自动扩容,返回一个新的数组长度=原数组长度*1.5+1;
LinkedList
01,采用链表存储方式,插入和删除元素时效率比较高
Set
Set接口存储的是唯一,无序对象的集合
HashSet是set的实现类
01,存放的是对象的引用、
02,hashset底层是hashMap实现的
02,hashsset中添加数据的步骤
001,对key的hashcode进行hash运算,得到的值就是对应的index
002,判断index所指向的数组元素是否为空,如果为空就直接插入
003,如果不为空,依次查询entry中的next所指定的元素,判断key是否相等,如果想等就
直接覆盖
004,如果不相等,通过next变量将值插入entry数组中
HashSet与treeSet对比
01,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只不过
Map的key
02,Map的Key和Set都有一个共同的特性就是集合的唯一性,TreeMap更是多了一个排序的功
能
03,hashCode和equals()是hashMap用的,因为无需排序,所以只需要关注定位和唯一性即
可
04,由于treemap需要排序,所以需要一个Comparator为键值进行大小比较
map
01,map是一个键值对的集合,有key和value,通过key拿到value的值
02,Set中的add默认底层走的是Map的put,所以key是不允许重复的,也是先判断对象的
hashCode,之后equals比较