1.常见的集合类
主要分为两类,Collection,Map
- 1.Collection 中有两个子接口
- list接口中常用的实现类有 Array List和LinkedList
- set接口中有实现类HashSet和TreeSet
- 2.Map中常见的实现类有:Hash Map,Tree Map,ConcurrentHashMap
2. ArrayList和LinkedList区别
内部实现方式:
- ArrayList:使用数组实现,内部维护一个可变长度的数组来存储元素。
- LinkedList:使用链表实现,内部由一系列节点组成,每个节点包含数据和指向下一个节点的引用。
访问效率:
- ArrayList 的随机访问效率较高,通过索引可以直接访问数组中的元素,时间复杂度为 O(1)。
- LinkedList 的随机访问效率较低,需要从头节点开始遍历查找指定位置的元素,时间复杂度为 O(n)。
插入和删除操作:
- ArrayList 在末尾插入和删除元素的效率较高,时间复杂度为 O(1)。但在中间或开头插入和删除元素时,需要进行数组元素的移动,效率较低,时间复杂度为 O(n)。
- LinkedList 在任意位置插入和删除元素的效率较高,只需要修改节点的引用,时间复杂度为 O(1)。但在获取指定位置的元素时,需要从头节点开始遍历查找,效率较低,时间复杂度为 O(n)。
空间占用:
- ArrayList 在内存中连续存储元素,相对于 LinkedList 会占用较少的内存空间。
- LinkedList 需要为每个节点额外存储一个指向下一个节点的引用,相对于 ArrayList 会占用更多的内存空间。
3.HashMap , ConcurrentHashMap ,HashTable区别
线程安全性:
- Hashtable:Hashtable 是线程安全的,所有的方法都是同步的(synchronized),这意味着多个线程可以安全地访问一个 Hashtable 实例。
- HashMap:HashMap 不是线程安全的,它的方法不是同步的,如果多个线程同时访问一个 HashMap 实例,可能会导致不确定的行为。
- ConcurrentHashMap:ConcurrentHashMap 也是线程安全的,但它的实现方式与 Hashtable 不同,它使用了更加精细的锁机制,能够在保证线程安全的同时提供更好的性能。
null 值:
- Hashtable:不允许键或值为 null。
- HashMap:允许键和值为 null。
- ConcurrentHashMap:允许键和值为 null。
性能:
- 在并发场景下,ConcurrentHashMap 的性能通常优于 Hashtable,因为它采用了分段锁(segmented locking)的方式,不同的部分可以被不同的线程同时访问,从而提高了并发访问的效率。
- 如果你需要一个线程安全的 Map 并且不需要允许 null 值,可以选择使用 Hashtable 或 ConcurrentHashMap;如果你不需要线程安全性,或者需要允许 null 值,可以选择使用 HashMap。在并发场景下,不建议使用Hashtable,推荐使用 ConcurrentHashMap 来获取更好的性能表现。