java集合类详解
集合类的继承关系详解图
List解析
ArrayList 和 Vector的区别
- ArrayList 是线程不安全的,Vector是线程安全的。
- ArrayList 每次增加的容量是当前容量的 50%,而Vector是每次都是增加当前容量的100%
- ArrayList和Vector都是使用数组来实现的。
- 他们的父类都是AbstractList 都实现了List接口,所以他们的方法都是一样的.
- 都实现了RandomAccess接口,支持随机访问,是随机访问标志。在实现了改接口的类中,使用for循环遍历,要比使用Iterator遍历更快。
- Vector可以设置增长因子,而ArrayList不可以。
LinkedList 和 ArrayList的区别
- LinkedList 底层使用双向链表来实现数据存储,ArrayList底层使用数组来实现数据存储。
- LinkedList 的父类是AbstractSequentialList,ArrayList的父类是AbstractList,都实现了List接口,LinkedList实现了Deque接口
- 性能区别,LinkedList的随意的增删改 的性能会比ArrayLisy表现更优秀,而在查询数据,尤其是根据索引查询数据的情况下,ArrayList会表现的更加优秀。
Set解析
Set中元素不可以重复,是无序的(这里无序是指存入元素的先后顺序与输出元素的先后顺序不一致)
TreeSet和HashSet
- TreeSet 和HashSet 都是线程不安全的,TreeSet 底层存储的数据结构是二叉树,HashSet的底层存储结构是哈希表。
- TreeSet不能存放null值,TreeSet是有序的,TreeSet排序方法有两个,一个是自然排序,一个是定制排序,定制排序时,排序对象必须实现Comparable接口,重写compareTo(Object obj)方法, TreeSet 判断对象是否相等时,是通过对象的equals方法来判断的。
- HashSet可以存放null值,但是只能存一个null值,HashSet 是无序的。HashSet是根据对象的Hash值来决定对象的存储方法,HashSet判断对象是否相等的依据是对象的HashCode()方法和equals()方法,所有重写equals()方法时必须同时重写HashCode()方法
- TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。
- TreeSet和HashSet的父类都是AbstractSet,TreeSet实现了NavigableSet,HashSet实现了Set接口,NavigableSet又继承了SortSet接口。
HashMap 和HashTable
- 都继承了Map接口,底层数据基于hash表。
- HashMap 是线程不安全的 可以存在null Key和null Value,但只能存在一个。
- Hashtable 是线程安全的,不允许null key和value。
- HashMap 相同key,后来的数据会覆盖前面的value。
常用方法
-
size()
集合的大小
-
isEmpty()
集合是否为空
-
toArray(T[])
如果为空参则将集合转换成Object数组,如果传入的是T类型的数组,则会将集合中的数据放入对应的数据,如果传入的数据尺寸太小则会对数组重新构建并且返回新数组,如果过大会将其他未使用的置为null;
-
clear()
清空集合
-
removeAll(Collection)
移除与Collection的交集,
-
contain(Object)
判断当前集合中是否含有该对象,判断对象是否相等,根据该对象的equals方法.
-
stream
返回一个流
-
removeIf(filter)
删除符合要求的数据
Collections对象使用
- copy 集合拷贝
- max 集合最大值
- min 集合最小值
- replaceAll 替换
- sort 排序