集合——源码分析



1. 什么是集合

  • 集合是一个用来存放数据的容器(数组也是),但集合不同的是可以存放不同类型的对象,并且大小可变
  • 其常用类型有Set,List,Map。这些常用的类型往上提取就有了Collection和Map接口


1.1 Collection接口的方法

add(E):添加一个对象
addAll(Collection<? extengds E>):添加指定集合里的全部对象

clear():清空集合
remove(Object):移除一个对象
removeAll(Collection<?>):移除集合里的全部对象

contains(Object):是否包含某个对象
containsAll(Collection<?>):是否包含某集合的全部对象
isEmpty():集合是否为空
size():集合对象的个数
retainAll(Collection<?>):交集,结果放在调用方法的集合

iterator():获取迭代器


1.2 Iterator迭代器

Collection接口继承Iterable接口,而Iterable接口有iterator()方法,该方法返回一个迭代器(用于遍历集合)


1.3 iterator也是一个接口,里面有四个方法


1.4 Map接口的方法

containsKey(Object):是否包含该Key
containsValue(Object):是否包含该Value
get(Object):根据Key获取Value
put(K,V):添加一个键值对
remove(Object):根据Key移除一个键值对




2. 常见的三个集合类型


一. List——有序,可重复

1. ArrayList (底层是数组)

  • add 是最常用的方法了,我们来看看源码


  • get


  • set


  • remove


  • toArray






2. LinkedList (底层是双向链表)

  • add国际惯例,看源码


  • remove

链表实现移除元素的图示


  • get


  • set






二. Map

Map不同于Collection集合,Map存放的是键值对,且键不能重复

1 .HashMap (底层哈希表,Java中用链表的数组实现,无序)

  • put (相当于Collection的add)


  • get

  • remove 也是相同方式就偷懒不放出来了


2. TreeMap (底层红黑树,用Comparator排序)

  • put

1575711596293

  • get

1575712773581

  • remove

1575712822192

三. Set——无序,不可重复

1. HashSet

  • 注意其构造函数,底层用的是HashMap,而Set集合存的不是键值对怎么办?

  • Set的值存入Map的键里面,而Map的全部值存放同一个Object

其余都和HashMap一致,不再赘述

2. TreeSet

  • 更加和TreeMap一致,懒得说了




猜你喜欢

转载自www.cnblogs.com/Howlet/p/12003389.html