集合框架总结

源码分析导航
ArrayList:https://blog.csdn.net/MOKEXFDGH/article/details/88575150
LinkedList:https://blog.csdn.net/MOKEXFDGH/article/details/88615783
HashMap:https://blog.csdn.net/MOKEXFDGH/article/details/88628558
ConcurrentHashMap:https://blog.csdn.net/MOKEXFDGH/article/details/88660349



List, Set, Map 的区别

  • List: 可以有多个元素引用相同的对象,有序对象。
  • Set: 不允许有重复元素,不会有多个元素引用相同对象。
  • Map: 存储键值对,key 可以引用相同对象,但是内容不能相同(String)。

ArrayList, Vector, LinkedList 区别

ArrayList和LinkedList:
ArrayList 底层使用的是数组,存读效率高,插入删除特定位置效率低。
LinkedList 底层使用的是双向链表,插入删除效率高,而读取效率低。

ArrayList和Vector:
Vector 类中所有方法都是同步的,可以多个线程安全地访问一个 Vector 对象。但是一个线程访问时,Vector 要在同步操作上耗费大量时间,效率低,此时可以使用 ArrayList,虽然不是同步的,但单线程下不需要同步,效率高。


HashMap 和 HashTable 的区别

  • HashMap: 是非线程安全的,因此效率较高;允许有 null 的存在。
  • HashTable: 是线程安全的,内部的方法基本都经过synchronized;只要有一个 null,就会直接抛出 NullPointerException 异常。

HashMap 和 HashSet 的区别

HashMap:

  1. 实现Map接口,存储键值对
  2. 调用 put() 方法添加元素
  3. 使用 key 计算 hashcode

HashSet:

  1. 实现Set接口,仅存储对象
  2. 调用 add() 方法添加元素
  3. 使用成员对象来计算 hashcode(相同用equals)

HashMap 和 ConcurrentHashMap 的区别

  • ConcurrentHashMap: 线程安全(UNSAFE,CAS算法),且并发性能更好。对整个桶数组进行了分段(Segment),然后在每个分段上都用 lock 锁进行保护,并发性能更好;不允许有空值。
  • HashMap: 非线程安全,允许有空值。

HashSet 检查重复

  1. 判断 hashcode 是否相等,即插入位置是否相同;不相同则说明没有重复出现
  2. hashcode 相同才会调用 equals 方法来检查对象是否真的相同,如果不相同才会确认不是重复元素;相同则不会插入。

comparable 和 comparator 的区别

  • comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序。
    使用方法:实现Comparable接口(implements Comparable),重写int comparableTo(Object o)方法。Collections.sort(list)排序。
  • comparator接口实际上是出自 java.util 包它有一个compare(Object obj1, Object obj2)方法用来排序。
    使用方法:自定义类实现comparaor,并覆盖compare方法。Collection.sort(list,new 自定义类)。

数组和 List 相互转换

  • List -> 数组:toArray(list.size())
  • 数组 -> List:Arrays.asList(a)

ArrayList 集合的交集、并集、差集

主要的三个方法:

  • addAll(Collection<? extends E> c) : 按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。
  • retainAll(Collection<?> c): 仅保留此列表中包含在指定集合中的元素。
  • removeAll(Collection<?> c) : 从此列表中删除指定集合中包含的所有元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值