1、Hash Map 与 Hash Set

HashMap

JDK1.8前:HashMap的数据结构是 数组 + 链表;

也就是说每个数组里面装的是链表,但是由于链表的长度会随着数据越多越长,在这情况下,链表的寻找数据的时间复杂度也随着增长,影响性能。

JDK1.8后:HashMap的数据结构是 数组 + 链表 + 红黑树;

当链表的长度超过 8 的时候,将链表转为红黑树。
在使用链表的时候时间复杂度随着长度成线性增长,而使用红黑树则像是对数函数增长。

HashSet

  • HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
  • HashSet 允许有 null 值。
  • HashSet 是无序的,即不会记录插入的顺序。
  • HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
  • HashSet 实现了 Set 接口。

2、ArrayList 与 LinkList

ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

LinkList

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。
图片
一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。
图片
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

对比与使用

LinkedList 与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
因为链表结构中,要进行查询需要进行遍历整个链表,而Array结构中,存在下标,可以通过下标查找。但是在添加与删除中,可以直接删除在链表中删除,而Array结构中,删除后需要调整下标。所以结构决定了性能的不同。


Lougacen_Jc
7 声望0 粉丝