Map 集合详解HashMap_TreeMap_LinkedHashMap

来源:互联网 发布:淘宝帐号俩个手机登陆 编辑:程序博客网 时间:2024/05/24 05:46

Map接口的实现类有HashMap TreeMap LinkedHashMap

HashMap:一般情况下,使用HashMap插入、删除、定位元素。底层实现链表加数组

TreeMap:按自然规律大小顺序或自定义顺序遍历,使用TreeMap 。底层实现二叉树

LinkedHashMap:按照添加的顺序输出,不进行大小排序。底层实现双向链表是HashMap的子类

Eg: Maplinkedhashmap = new LinkedHashMa();

Map treemap =new TreeMap ();

linkedhashmap.put(“2”,”ab”);

linkedhashmap.put(“1”,”cd”);

treemap.put(“2”,”ab”);

treemap.put(“1”,”cd”);

遍历linkedhashmap的时候,先遍历到的key是2,因为2是先放进去的

遍历treemap的时候,先遍历到的key是1,因为是按顺序升序排列

线程安全性

HashMap TreeMapLinkedHashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null,不支持线程同步,即任一时刻可以有多个线程同时写HashMap,会导致数据的不一致性。如果需要同步,使用Collections的synchronizedMap来包装一下使HashMap具有同步的能力

Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

实现Map同步的写法: 

Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));

import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Map; public class TestLinkedHashMap {  public static void main(String args[])  {   System.out.println("*************************LinkedHashMap*************");   Map<Integer,String> map = new LinkedHashMap<Integer,String>();   map.put(6, "apple");   map.put(3, "banana");   map.put(2,"pear");      for (Iterator it =  map.keySet().iterator();it.hasNext();)   {    Object key = it.next();    System.out.println( key+"="+ map.get(key));   }      System.out.println("*************************HashMap*************");   Map<Integer,String> map1 = new  HashMap<Integer,String>();   map1.put(6, "apple");   map1.put(3, "banana");   map1.put(2,"pear");      for (Iterator it =  map1.keySet().iterator();it.hasNext();)   {    Object key = it.next();    System.out.println( key+"="+ map1.get(key));   }  }}运行结果如下:*************************LinkedHashMap*************6=apple3=banana2=pear*************************HashMap**************************2=pear6=apple3=banana分析:LinkedHashmap 的特点是put进去的对象位置未发生变化,而HashMap会发生变化.

常用方法

Objectput(Object key,  Object value):

将互相关联的一个关键字和一个值放入该映射,如果关键字已存在,那么与此关键字相关联的新值将取代旧值,返回关键字的旧值。如果关键字原先并不存在,返回null

Objectremove(Object key):     从映射中删除与key相关的值

voidclear():    删除所有映射

voidputAll(Map t):    将来自特定映射的所有元素添加给该映射

Objectget(Object key):

获取与关键字key相关的值,并返回与关键字key相关的对象,如没有找到key,返回null

booleancontainKey(object key)

booleancontainValue(object value)

booleanisEmpty()

intsize

视图操作

Set keySet()   返回映射中所有关键字的视图集 Set keys = Map.keySet()

Collectionvalues()  返回映射中所有值的视图集

SetentrySet()   返回Map.Entry对象的视图集,即映射中的关键值/对

Map.Entry类

Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键值/对

通过这个集合的迭代器,您可以获得每一个条目(唯一获取方式)的键或值并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。
  (1) Object getKey(): 返回条目的关键字
  (2) Object getValue(): 返回条目的值
  (3) Object setValue(Objectvalue): 将相关映像中的值改为value,并且返回旧值

例子:java代码Map<String,Integer> map=new HashMap<String,Integer>();   map.put("1", 1);   map.put("2", 2);   map.put("3", 3);   map.put("3", 3);       Iterator itor=map.entrySet().iterator();   while(itor.hasNext()){     Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)itor.next();     System.out.println("key="+entry.getKey().toString());     System.out.println("values="+entry.getValue().toString());   }   
Map<Integer,String> map = new LinkedHashMap<Integer,String>(); map.put(1, "星期一");map.put(2, "星期二"); map.put(3, "星期三"); map.put(4, "星期四"); map.put(5, "星期五");map.put(6, "星期六");map.put(7, "星期日"); for(Map.Entry<Integer, String> entry: map.entrySet()) {System.out.print(entry.getKey() + ":" + entry.getValue() + "\t"); } 輸出結果:1:星期一 2:星期二 3:星期三 4:星期四 5:星期五 6:星期六 7:星期日



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 猫见到狗受惊了怎么办 头被桌子撞肿了怎么办 鱼缸里的鱼缺氧怎么办 上火眼皮打拉下来怎么办 小孩头敲了个包怎么办 四个月不吃奶怎么办啊 4个月宝宝不吃奶粉怎么办 3个月婴儿不喝奶怎么办 地图舌加裂纹舌怎么办 3个月宝宝厌食怎么办 宝宝不吃奶吃手怎么办 三个月的宝宝光吃手不吃奶怎么办 九个月宝宝积热怎么办 前门牙露神经了怎么办 7岁宝宝吐舌头怎么办 连续液精几个月了怎么办 接吻时对方伸舌头我要怎么办 亲嘴不想让对方伸舌头怎么办 喝醉酒想吐吐不出来怎么办 凉了胃怎么办喝什么药 生宝宝后屁股扁了怎么办 屁股又宽又扁怎么办 烫伤一年多色差没有恢复怎么办 上古卷轴5不能动怎么办 上古卷轴ol卡死怎么办 小妹妹这么骚长大了怎么办 同事借钱忘了还怎么办 怀了二胎想离婚怎么办 如果闺蜜疏远了怎么办 考上博士但是硕士要延期怎么办 硕士延期也不能毕业怎么办 硕士论文工作量太少被延期了怎么办 竞彩足球比赛延期中断怎么办? 竞彩足球输了怎么办 讯飞语音不兼容百度怎么办 虎牙直播不兼容语音怎么办 为什么手机打开游戏就死机怎么办 2007cad打开时时死机怎么办 手机qq总是无响应怎么办 英雄联盟登录服务器未响应怎么办 苹果7p照相死机怎么办