Collection体系

Collection

Collection是Java所有集合类的父类。 常见的有:List、Set、Map、Tree。

  • 常用方法:
     retailAll(Collection t); 取两个集合的交集。
     contains(T t); 是否包含某个值。
  • 对应的工具类:Collections
     常用方法:
      1. csort(Collection t); 对实现了Comparable接口的集合元素排序,默认是升序。
      2. reverse(Collection t); 对集合逆序排列。如:915689 —> 986519
      hashCode(Object o); 此方法是继承与Object类的可以重写,也可以通过工具类调用。

1.List

  • 常见的有:ArrayList、HashList、LinkedList。
  • 常用方法:
    Collection的方法ArrayList也有。
  • 对应的工具类: Lists
     这个需要额外的导包:Guava。

ArrayList

  • 常用方法:
     new ArrayList(Collection t); 可以将Collection的子类直接转换为List集合。
  • ArrayList的动态扩容:
     ArrayList的底层其实是数组,如果当我们添加的元素超出原有的底层数组长度时,他会重新创建一个是原来数组长度1.5倍的数组。并通过Arrays.copyOf()方法复制原来数组的数据。

2.Set

  • 特性:无序、元素唯一。
  • 常见的有:HashSet、LinkedHashSet
  • 常用方法:
     Collection的方法HashSet也有。
  • 对应的工具类: Sets
     这个需要额外的导包:Guava。

HashSet

 1. 元素唯一:
  HashSet元素唯一并不是我们每插入一个元素就调用方法contains(Object o),这样效率太低下。他是通过Objects.hashCode()方法将元素们分类如下图。这样在hashCode值相同的列中去找可以有效的提高效率。
Collection体系
 2. 常用方法:
  new HashSet(Collection t); 可以将Collection的子类直接转换为Set集合,且去掉Collection集合中重复的元素只保留一个。
 通过查看源码发现HashSet本质就是HashMap的‘key’,他们的Iterator(迭代器)是同一个。
  如图:
Collection体系
Collection体系
 因此这里需要额外的注意,如果通过的Map.keySet();获取的set集合,如果改变Map的key也会跟着改变。 Map.values()方法返回Map的值集合,以Collection 的形式返回,他的Iterator也是和Map Value的Iterator相同,如果添加或删除也是会直接影响Map的值
  如图:
Collection体系
 3. Iterator扩展:
  当一个集合(Map、Collection)创建成功并赋值,Iterator(迭代器)就和值绑定了。因此我们需要改变集合中的某个数据底层都是通过Iterator改变的。虽然List集合可以通过“for循环”遍历,但是绝对不能通过“for循环遍历”改变、删除集合中的某个值。ConcurrentModificationException(并发修改异常)。

LinkedHashSet

 1. 特性:
  * 他是有序的。是按插入时的顺序排序。
  * 元素唯一。
 2. 常用方法:
  new LinkedHashSet(Collection t); 可以将Collection的子类直接转换为linkedHashSet集合,且去掉Collection集合中的重复的元素只保留一个。

TreeSet

 1. 特性:有序,默认是升序排序。
 2. 常用方法:
  new TreeSet(Collection t); 可以将Collection的子类直接转换为TreeSet集合,且默认的就会排序。 要求元素实现Comparable接口才能实现排序。
 3. TreeSet 本质上也是TreeMap。
Collection体系

3.Map

 1. 特性:使用的键值对的方式存储数据。 key不能重复value可以。
 2. 常见的有:Properties、HashMap…。
 常用方法:
  * keySet(); 返回Map集合的key以Set集合的形式返回map的key。
  * values(); 返回Map集合的值以Collection的形式返回map的value。
  如果修改keySet()、values()方法的返回值会直接影响HasdMap集合的数据。因为他们的Iterator和Map的Iterator是同一个。
 源码分析: Collection体系
Collection体系

如有错误的地方还望各位网友指出改正。