Java Collection

90 阅读2分钟

Map集合和Collection集合类总结

Java的数组有很多弊端:长度固定,不可增删,只能存储同一种数据类型,数组内元素的内存空间是连续分配的,对内存要求高。 而Java中的集合弥补了这一点,在Java中的集合可以分为两大类Collectionmap, 对此基于我们不同的需求可以产生不同的实现。

Collection(单列集合)

List

  • List接口是一个有序集合,允许有相同的元素

ArrayList

  • Arraylist是最常用的实现类,拥有线性结构,本质上就是一个数组,通过动态扩容实现添加元素(创建一个1.5x的空间,把原先的所有元素拷贝过去)

LinkedList

  • LinkedList底层为链表,特点是分配内存空间不是必须连续的、插入,删除操作也很快,只要修改前后指针,时间复杂度为O(1)

ArrayList和LinkedList区别

  1. ArrayList是实现基于动态数组的数据结构,而LinkedList是基于链表的数据结构
  2. 对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList需要移动指针
  3. 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList需要移动数据

Set

没有顺序,不能包含重复元素

HashSet

  1. HashSet中不能包含重复元素,可以有NULL元素,存入的元素是无序的
  2. HashSet底层结构是哈希表,确认唯一性的两个方法是 HashCode()/equals()方法
  3. 添加删除时间复杂度都是O(1)
  4. 非线性安全

LinkedHashSet

  1. LinkedHashSet中不能包含重复元素,可以有NULL元素,存入的元素是按照放入顺序排列
  2. 底层结构是哈希表和链表,链表保证了数据存储和取出一致,哈希表保证了元素的唯一性
  3. 添加删除时间复杂度都是O(1)
  4. 非线性安全

Map(key-value集合)

  • Map即为映射,不能有重复的key,可以有重复的value(例如ID和name)

HashMap

  1. HashMap 是一个散列表,它存储的内容是键值对(key-value)映射
  2. HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口
  3. HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的

TreeMap

  1. TreeMap 是一个有序的key-value集合,它是通过红黑树实现的
  2. TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合
  3. TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合
  4. TreeMap 实现了Cloneable接口,意味着它能被克隆
  5. TreeMap 实现了java.io.Serializable接口,意味着它支持序列化
  6. TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n)