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

时间: 2024-10-12 00:50:19

Map List相关的相关文章

maxscript Map Channel 相关笔记

3dmax 中的<Map Channel>可以保存0-99共100个编号,max中通过这些通道可以取得顶点颜色通道,每一个UV坐标通道信息.Map Channel的0号通道通常代表模型的顶点颜色 :1号通道为默认的UV纹理通道:其余编号用户启用了其他纹理通道则会激活. 1.meshop.getnumcpvverts  函数可获取一个模型网格的颜色顶点数量.对应模型Mapping Methods的<Channel 0>.但前提是该模型指定了顶点颜色,如果不指定顶点颜色 getnumc

map的相关妙用

private static final Map<String, String> flagMap = new HashMap<String, String>(); static{ flagMap.put("RP", "年度学员选课"); flagMap.put("YP", "年度计划"); flagMap.put("MP", "月度计划"); flagMap.pu

set,list,map集合相关

一.集合类简介 数组是很常用的一种的数据结构,我们用它可以满足很多的功能,但是,有时我们会遇到如下这样的问题: 1.我们需要该容器的长度是不确定的. 2.我们需要它能自动排序. 3.我们需要存储以键值对方式存在的数据. 如果遇到上述的情况,数组是很难满足需求的,接下来本章将介绍另一种与数组类似的数据结构--集合类,集合类在Java中有很重要的意义,保存临时数据,管理对象,泛型,Web框架等,很多都大量用到了集合类. 常见的集合类有这些种: 实现Collection接口的:Set.List以及他们

list,set,map,数组之间的相互转换详细解析

1.list转setSet set = new HashSet(new ArrayList()); 2.set转listList list = new ArrayList(new HashSet()); 3.数组转为listList stooges = Arrays.asList("Larry", "Moe", "Curly");或者String[] arr = {"1", "2"};List list =

ThinkGeo Map Suite免费下载及使用介绍

原文来自龙博方案网控件中心http://www.fanganwang.com/product/1353转载请注明出处 Map Suite是我们目前为使用.NET 3.5和Visual Studio 2008或2005的用户所设计的功能强大的GIS系列控件.它在GIS产品的特性和功能上比我们初期的产品有了较大的突破,同时与传统版本相比我们更推荐您使用MAP Suit ,可用于桌面应用程序,Web应用程序,SilverLight以及Services和Pocket PC. 具体功能: 纯 .NET托管

【cas】利用Map返回更多信息

在cas中默认获取的用户信息为登录时填写的登录用户名,但是如果我不想返回登录的用户名,返回其他的信息呢? 一.将登录用户的id作为默认值 显示 首先在cas server中找到deployerConfigContext.xml配置文件中关于认证信息配置的地方即name="credentialsToPrincipalResolvers",这里是 关于返回用户信息所对应的类.默认执行的是下面这个类. <bean class="org.jasig.cas.authentica

list,set,map,数组间的相互转换

1.list转set Set set =  new  HashSet( new  ArrayList());    2.set转list List list =  new  ArrayList( new  HashSet());    3.数组转为list List stooges = Arrays.asList("Larry", "Moe", "Curly"); 此时stooges中有有三个元素.4.数组转为setint[] a = { 1,

java list map set array 转换

1.list转set Set set = new HashSet(new ArrayList()); 2.set转list List list = new ArrayList(new HashSet()); 3.数组转为list List stooges = Arrays.asList("Larry", "Moe", "Curly"); 此时stooges中有有三个元素.注意:此时的list不能进行add操作,否则会报"java.lan

Sass函数--map

MapSass 的 map 常常被称为数据地图,也有人称其为数组,是以 key:value 成对的出现. 1 $map: ( 2 $key1: value1, 3 $key2: value2, 4 $key3: value3 5 ) 首先有一个类似于 Sass 的变量一样,用个 $ 加上命名空间来声明 map.后面紧接是一个小括号 (),将数据以 key:value 的形式赋予,其中 key 和 value 是成对出现,并且每对之间使用逗号 (,) 分隔,其中最后一组后面没有逗号.其中键 key