码迷,mamicode.com
首页 > 其他好文 > 详细

Map List相关

时间:2017-12-13 02:06:43      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:size   cti   链表   存在   tor   list   rac   一个   基于   

 

一、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相关

标签:size   cti   链表   存在   tor   list   rac   一个   基于   

原文地址:http://www.cnblogs.com/gucl/p/8030482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!