java集合类详解

集合类的继承关系详解图

Collection解析

List解析

ArrayList 和 Vector的区别

  1. ArrayList 是线程不安全的,Vector是线程安全的。
  2. ArrayList 每次增加的容量是当前容量的 50%,而Vector是每次都是增加当前容量的100%
  3. ArrayList和Vector都是使用数组来实现的。
  4. 他们的父类都是AbstractList 都实现了List接口,所以他们的方法都是一样的.
  5. 都实现了RandomAccess接口,支持随机访问,是随机访问标志。在实现了改接口的类中,使用for循环遍历,要比使用Iterator遍历更快。
  6. Vector可以设置增长因子,而ArrayList不可以。

LinkedList 和 ArrayList的区别

  1. LinkedList 底层使用双向链表来实现数据存储,ArrayList底层使用数组来实现数据存储。
  2. LinkedList 的父类是AbstractSequentialList,ArrayList的父类是AbstractList,都实现了List接口,LinkedList实现了Deque接口
  3. 性能区别,LinkedList的随意的增删改 的性能会比ArrayLisy表现更优秀,而在查询数据,尤其是根据索引查询数据的情况下,ArrayList会表现的更加优秀。

Set解析

Set中元素不可以重复,是无序的(这里无序是指存入元素的先后顺序与输出元素的先后顺序不一致)

TreeSet和HashSet

  1. TreeSet 和HashSet 都是线程不安全的,TreeSet 底层存储的数据结构是二叉树,HashSet的底层存储结构是哈希表。
  2. TreeSet不能存放null值,TreeSet是有序的,TreeSet排序方法有两个,一个是自然排序,一个是定制排序,定制排序时,排序对象必须实现Comparable接口,重写compareTo(Object obj)方法, TreeSet 判断对象是否相等时,是通过对象的equals方法来判断的。
  3. HashSet可以存放null值,但是只能存一个null值,HashSet 是无序的。HashSet是根据对象的Hash值来决定对象的存储方法,HashSet判断对象是否相等的依据是对象的HashCode()方法和equals()方法,所有重写equals()方法时必须同时重写HashCode()方法
  4. TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。
  5. TreeSet和HashSet的父类都是AbstractSet,TreeSet实现了NavigableSet,HashSet实现了Set接口,NavigableSet又继承了SortSet接口。

HashMap 和HashTable

  1. 都继承了Map接口,底层数据基于hash表。
  2. HashMap 是线程不安全的 可以存在null Key和null Value,但只能存在一个。
  3. Hashtable 是线程安全的,不允许null key和value。
  4. HashMap 相同key,后来的数据会覆盖前面的value。

常用方法

  1. size()

    集合的大小

  2. isEmpty()

    集合是否为空

  3. toArray(T[])

    如果为空参则将集合转换成Object数组,如果传入的是T类型的数组,则会将集合中的数据放入对应的数据,如果传入的数据尺寸太小则会对数组重新构建并且返回新数组,如果过大会将其他未使用的置为null;

  4. clear()

    清空集合

  5. removeAll(Collection)

    移除与Collection的交集,

  6. contain(Object)

    判断当前集合中是否含有该对象,判断对象是否相等,根据该对象的equals方法.

  7. stream

    返回一个流

  8. removeIf(filter)

    删除符合要求的数据

Collections对象使用

  1. copy 集合拷贝
  2. max 集合最大值
  3. min 集合最小值
  4. replaceAll 替换
  5. sort 排序

相关文章: