
collection和map区别
- 存储结构:Collection是最基本的集合接口,代表一组对象,即Collection的元素。一些Collection允许相同的元素,另一些不允许。Map则是将键映射到值,键值对的存储结构,其中每一个键最多只能映射到一个值。
- 操作方法:Collection中存储了一组对象,主要进行添加、删除、清空、遍历(读取)、是否为空、获取大小等操作。Map主要进行键值对的存取操作,包括获取、设置、删除等。
- 元素唯一性:在Collection中,每一个元素都是一个独立的对象。而在Map中,每一个键最多只能映射到一个值,键的唯一性保证了值的唯一性。
- 数据查询:在Collection中,由于元素是独立的,无法直接通过元素进行查询。在Map中,可以通过键直接获取对应的值。
set和list的区别
- 有序性:List是有序的,它允许根据元素的插入顺序进行访问。而Set是无序的,元素的位置并没有定义。
- 重复性:List允许重复的元素,也就是说,你可以在List中存储多个相同的元素。然而,Set不允许重复的元素,所有元素都是唯一的。
- 查找操作:List和Set都支持搜索、添加和删除操作,但它们的效率不同。在List中,搜索操作的平均时间复杂度为O(n),而在Set中,搜索操作的平均时间复杂度为O(1),其中n是集合中元素的数量。这是因为Set基于哈希表实现,所以搜索操作通常更快。
- 容量增长:当元素数量超过集合当前容量时,Set和List的处理方式也不同。List会自动增长以容纳更多元素,而Set则不会增长,当添加超过当前容量时,会抛出异常。
- 应用场景:List主要用于需要按照特定顺序存储和访问元素的场景,如日志记录、历史记录等。而Set主要用于需要快速查找和删除元素的场景,如过滤重复的IP地址、手机号码等。
ArrayList和LinkedList区别
- 数据结构:ArrayList是动态数组的数据结构,而LinkedList则是双向链表的数据结构。
- 效率:当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,需要移动指针从前往后依次查找。然而,在增加和删除操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList在内部数组中增加或删除一项需要移动所有后续元素的指针。
- 自由性:ArrayList的自由性较低,因为它需要手动设置固定大小的容量,使用起来比较方便。而LinkedList的自由性较高,能够动态地随数据量的变化而变化,但使用起来不如ArrayList方便。
- 控件开销:ArrayList的主要控件开销在于需要在List列表预留一定空间。而LinkedList的主要控件开销在于需要存储结点信息以及结点指针信息。
hashmap的数据结构以及插入删除流程
数据结构:
- HashMap 中包含一系列的桶(数组),每个桶中存储一个链表或红黑树(当桶中元素大于8时转变为红黑树,小于6时转变为链表)。
插入流程:
- 计算键的哈希值。
- 使用哈希值找到对应的桶。
- 如果桶为空,将新节点添加到该桶中。
- 如果桶不为空,将新节点添加到链表或红黑树中,并更新哈希表中的指针。
- 在JDK 1.7中,HashMap采用的是头插法存储,而在JDK 1.8中,HashMap采用的是尾插法。头插法在存储过程中容易发生死锁问题,特别是在多线程环境下。因此,JDK 1.8采用了尾插法,以避免死锁问题。
删除流程:
- 计算键的哈希值。
- 使用哈希值找到对应的桶。
- 如果桶为空,则删除失败。
- 如果链表或红黑树只有一个节点,则直接删除该节点。
- 如果链表或红黑树有多个节点,则找到要删除的节点,并从链表或红黑树中删除该节点。
- 最后,可能需要调整哈希表的大小。
- 加载因子为0.75,也就是当数组桶到达75%的程度扩容为原来的两倍。

797

被折叠的 条评论
为什么被折叠?



