首页 > 编程知识 正文

LinkedHashMap 与 HashMap

时间:2023-05-03 21:26:57 阅读:55642 作者:4476

HashMap和双向链表合在一起的就是LinkedHashMap。 链接的HashMap是一个HashMap,它包含HashMap,因此更准确地说,它将所有条目节点链接到双向链表。 由于链接的HashMap是HashMap的子类,因此链接的HashMap当然具有HashMap的所有特性。 例如,链接HashMap的元素访问过程基本上与HashMap类似,只是细节实现略有不同。 当然,这是由链接的hashmap本身的特性决定的。 这是为了额外维护用于保持迭代顺序的双向链表。 另外,链接hashmap可以很好地支持LRU算法,笔者在第7节中实现了基于链接hashmap很好地支持LRU的机制。

请记住。 链接的Hashmap的特点是put进入的位置不变,Hashmap也不变。

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

Map主要用于存储密钥对,根据密钥获取值,因此不允许密钥重复,但允许值重复。

HashMap是最常用的map,可以基于密钥的HashCode值存储数据,并基于密钥直接获取其值,访问速度快,遍历时获取数据的顺序完全随机。 在HashMap中,最多只有一个记录的键为Null。 多个记录允许的值为Null。 HashMap不支持线程同步。 这意味着多个线程可以随时同时写入HashMap。 有可能导致数据不一致。 如果需要同步,请使用Collections的同步映射方法使HashMap具有同步功能,或使用ConcurrentHashMap。

Hashtable类似于HashMap,从Dictionary类继承,但:不允许记录的键或值为空。 支持线程同步。 也就是说,Hashtable在写入时会变慢,因为只有一个线程可以随时写入Hashtable。

链接的HashMap是HashMap的子类,其中存储记录的插入顺序。 当Iterator遍历链接的hashmap时,会首先插入先前获得的记录。 构建时也可以带参数,按照应用次数进行排序。 遍历过程中比HashMap慢,但有例外。 如果HashMap容量较大且实际数据较少,则遍历速度可能比链接的HashMap慢。 这是因为链接的hashmap的遍历速度仅与实际数据有关,与容量无关。 HashMap的遍历速度与他的容量有关。

TreeMap实现了SortMap接口,可以按键对保存的记录进行排序。 默认值为键值升序排序,也可以指定排序的比较器。 在迭代器中遍历树形图时,生成的记录将进行排序。

通常,HashMap的使用最多,要在Map中插入、删除和放置元素,HashMap是最好的选择。 但是,如果要按自然或自定义的顺序遍历关键帧,则TreeMap更好。 如果需要输出的顺序与输入相同,则可以通过LinkedHashMap实现,也可以按照读取顺序排列。

HashMap是最常用的Map,可以基于密钥的hashCode值存储数据,并基于密钥直接获取其值,访问速度快。 HashMap最多只允许一个记录的键为空,而多个记录的值为空。

HashMap不支持线程同步。 这意味着多个线程可以一次同时写入HashMap,从而导致数据不一致。 如果需要同步,可以使用Collections的同步映射方法使HashMap具有同步功能。

Hashtable类似于HashMap,不同之处在于记录的键或值不允许为空。 支持线程同步。 也就是说,Hashtable在写入时会变慢,因为只有一个线程可以随时写入Hashtable。

链接的散列保存记录的插入顺序。 当Iterator遍历链接的hashmap时,会首先插入先前获得的记录。

遍历过程中比HashMap慢。 TreeMap可以按键对保存的记录进行排序。 也可以指定按升序排序或按默认顺序排序的比较器。 在迭代器中遍历TreeMap时,得到的记录进行了排序。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。