List接口
List接口的特点
1.List集合是有下标的
2.List集合是有顺序的
3.List集合可以存放重复的数据
List集合方法总结

  1. 单个集合间的操作
  2. void add(int index, E element) 在集合的指定下标index处插入指定元素element
  3. E get(int index) 返回本集合中指定下标index处的元素
  4. E remove(int index) 移除本集合中指定下标index处的元素
  5. E set(int index, E element) 用参数元素element替换集合中指定下标index处的元素
  6. int indexOf(Object o) 判断指定元素o在本集合中第一次出现的下标,如果不存在,返回-1
  7. int lastIndexOf(Object o) 判断指定元素o在本集合中最后一次出现的下标,如果不存在,返回-1
  8. List subList(int fromIndex, int toIndex) 截取子集合,包含formidex处的元素,不包含toIndex处的元素
  9. 集合间的操作与集合的迭代
  10. boolean addAll(int index, Collection<> c) 将参数集合c中的所有元素,插入到本集合中指定的下标index
  11. ListIterator listIterator() 返回此列表元素的迭代器,这个是List自己的,不太常用,可以逆序迭代

ArrayList

1.List接口的实现类
2,通常可以根据下标进行操作
3.元素有下标,有序,可重复
4.底层结构是数组,内存空间是连续的
5.增删操作比较慢,查询操作比较快[数据量比较大时]
6.初始容量为10,扩容1.5倍扩容

LinkedList

1.List的实现类
2.元素有下标,有序,可重复
3.底层的数据结构是链表,内存空间是不连续的
4.通过进行首尾节点的操作比较多
5.增删操作比较快,查询操作比较慢[数据量比较大时]
注意:LinedList的操作不是都慢,首尾操作还是比较快的

  1. 简单方法:
  2. void addFirst(E e) 添加首元素
  3. void addLast(E e) 添加尾元素
  4. E removeFirst() 删除首元素
  5. E removeLast() 删除尾元素
  6. E getFirst() 获取首元素
  7. E getLast() 获取尾元素
  8. E element() 获取首元素
  9. 功能一致但是名字不太好记的方法:
  10. boolean offer(E e) 添加尾元素
  11. boolean offerFirst(E e) 添加首元素
  12. boolean offerLast(E e) 添加尾元素
  13. E peek() 获取首元素
  14. E peekFirst() 获取首元素
  15. E peekLast() 获取尾元素
  16. E poll() 返回并移除头元素
  17. E pollFirst() 返回并移除头元素
  18. E pollLast() 返回并移除尾元素

Set接口

Set接口的特点

1.set集合没有重复的元素
2.set集合的元素是无序的
3.set集合可以存null值,并且null最多有一个
4.我们自定义对象如果想去重,需要在自定义类中添加重写的equals()与hashCode()

Map接口

Map接口的特点

1.map集合的结构是:键值对、KEY与VALUE、Map.Entry的映射关系
2.map中key值不允许重复,如果重复,对应的value会被覆盖
3.map中的映射关系是无序的
4.map没有自己的迭代器,所以迭代时通常需要转成set集合来迭代

Map集合方法总结

  1. 简单方法:
  2. void clear() 清空集合
  3. boolean equals(Object o) 判断集合对象与参数o是否相等
  4. int hashCode() 返回本集合的哈希码值
  5. boolean isEmpty() 判断集合是否为空
  6. int size() 返回本集合中键值对的个数
  7. map单个集合间的操作
  8. boolean containsKey(Object key) 判断map中是否包含指定的key
  9. boolean containsValue(Object value) 判断map中是否包含指定的value
  10. V get(Object key) 根据指定的key返回对应的value,如果不存在,返回null
  11. V remove(Object key) 删除本集合中参数key对应的键值对
  12. V put(K key, V value) 向集合中添加映射关系(键值对)
  13. void putAll(Map<> m) 向本集合中添加m集合的所有映射关系(键值对)
  14. map的迭代
  15. Collection values() 把本map中的Value值取出放入一个Collection中并返回这个Collection
  16. Set keySet() 把本map中的Key值取出放入一个Set集合中并返回这个Set集合
  17. Set<Map.Entry<K,V>> entrySet()
  18. 把本map中的每一对KV都看成是一个Entry,把所有的Entry取出放入一个Set集合中并返回这个Set集合

HashMap的存储过程:

1.HashMap的结构是数组+链表 或者 数组+红黑树 的形式
2.HashMap底层的Entry[ ]数组,初始容量为16,加载因子是0.75f,扩容按约为2倍扩容
3.当存放数据时,会根据hash(key)%n算法来计算数据的存放位置,n就是数组的长度,其实也就是集合的容量
4.当计算到的位置之前没有存过数据的时候,会直接存放数据
5.当计算的位置,有数据时,会发生hash冲突/hash碰撞
解决的办法就是采用链表的结构,在数组中指定位置处以后元素之后插入新的元素
也就是说数组中的元素都是最早加入的节点
6.如果链表的长度>8并且数组长度>64时,链表会转为红黑树,当链表的长度<6时,会重新恢复成链表
image.png