java集合
前言
集合知识的一些随笔
提示:以下是本篇文章正文内容,下面案例可供参考
一、Collection接口
1.list接口:存储有序的、可重复的数据
常用实现类:
1.ArrayList:作为List接口主要的实现类;线程不安全,效率高,底层采用Object[] elementData存储
底层创建了长度是10的Object[]数组elementData
扩容:默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中。
2.LinkedList:对于频繁的插入、删除操作,使用此实现类效率会比ArrayList高’底层采用双向链表存储
底层Object[] elementData初始化为{}.并没创建长度为10的数组,第一次调用add方法时,才创建长度10的数组,并将数据添加到数组中
3.Vector:作为List接口的古老实现类;线程安全效率低,底层采用Object[] elementData存储
jdk7和jdk8中通过Vector()构造器创建对象时,底层都创建了长度为10的数组。
在扩容方面,默认扩容为原来的数组长度的2倍。
2.set接口:存储无序的、不可重复的数据
常用实现类:
1.HashSet:作为Set接口的主要实现类;线程不安全,可存储null值
2.LinkedHashSet:作为Hashset的子类(添加数据的同时,还维护了两个引用,记录此数据的前一个数据和后一个数据)
3.TreeSet:可以照添加对象的指定属性进行排序
存储对象所在类的要求:
HashSet/LinkedHashSet:
要求:向Set(主要指:HashSet、LinkedHashSet)中添加的数据,其所在的类一定要重写hashCode()和equals()
要求:重写的hashCode()和equals()尽可能保持一致性:相等的对象必须具有相等的散列码
重写两个方法的小技巧:对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值。
总结
以上就是今天要讲的内容