Map List相关

Posted CoDeiSlifE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map List相关相关的知识,希望对你有一定的参考价值。

 

一、hashcode和equal

  • 如果两个对象的hashcode值不相等——>必定是两个不同的对象

  • 如果两个对象的hashcode值相等,就还要进行equals()判断,如果为true 表示两个对象相同,如果为false 则表示是两个不同对象

当使用hashmap时,首先调用加入对象的hashCode方法得到hashCode值,判断已经存在的对象的hashCode值是否与加入对象的HashCode值相等,如果不相等,说明是不同的对象,直接加进去,如果hashcode值相等,再进行equals判断,如果为true ,说明对象已经加进去,就不会在增加新的对象,如果为false 则直接加进去。

二、HashMap、LinkedHashMap、CurrentHashMap

  • HashMap   基于hash算法的Map接口的非同步实现,非线程安全;通过put(key ,value)和get(key)存取对象,put时,对key的hashcode值进行hash计算(可以理解为得到一个index)得到这个元素在数组中的位置,并将元素存储到该位置上,get时,通过对key的hashcode值的hash计算得到在数组中的位置,然后将该位置的元素取出。HashMap是无序的,内部维护的是单链表

  • LinkedHashMap   底层使用哈希表与双向链表保存元素,非线程安全,LinkedHashMap是有序的,有插入顺序和访问顺序,内部维护的是一个双向链表

  • CurrentHashMap   基于双数组和链表的Map接口的同步实现,线程安全

    HashMap是非线程安全的,当只有一个线程使用HashMap时没有问题,如果涉及到多个线程,就不能使用HashMap了,这时可以使用currentHashMap

三、HashMap和HashTable

  • HashMap    方法是非同步的,非线程安全;基于AbstractMap类,而AbstractMap类是Map接口的实现;key value都可以为null
  • HashTable    方法同步,线程安全,基于Dictionary类,key value都不能为null

四、ArrayList 、LinkedList 、Vector

  • ArrayList:    底层数组实现;方法不同步,非线程安全;查询快、增删慢
  • LinkedList    底层双向链表实现;方法不同步,非线程安全;查询慢、增删快
  • Vector        底层数组实现;方法同步,线程安全;

    总结:需要线程同步使用Vector,经常查询使用ArrayList,经常插入删除使用LinkedList

以上是关于Map List相关的主要内容,如果未能解决你的问题,请参考以下文章

工作中使用过与stream流相关的API操作

工作中使用过与stream流相关的API操作

Redis相关

Dart学习--之Iterable相关方法总结

java集合相关

Java集合类 List Set Map