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:星期日
- Map 集合详解HashMap_TreeMap_LinkedHashMap
- Map集合详解
- 集合详解(四):Map
- Java集合详解(二):Map
- Java中的Map集合详解
- Java Map集合的详解
- Java集合详解Collection、Map
- Java中Map集合详解
- Java集合详解--什么是Map
- 集合框架之Map集合详解
- JAVA集合详解(Collection和Map接口)
- Java SE 中map集合详解
- JAVA集合详解(Collection和Map接口)
- Java集合类详解 set、list、map、
- JAVA集合详解(Collection和Map接口)
- JAVA集合map、list、set详解
- 【集合详解】Java集合总结(中)-Map家族
- Map 集合
- Rikka with Parenthesis II
- kaggle项目实战一
- 一元购宝倒计时之angularJs-$interval
- onActivityResult:拍照不进入原因
- iOS崩溃堆栈信息的符号化解析
- Map 集合详解HashMap_TreeMap_LinkedHashMap
- FZU-2105 Digits Count(线段树)
- RxJava学习(十二)
- 安卓谷歌电子市场学习笔记系列——怎么移除集合中的元素(迭代器的使用)
- Centos 7.0 通过rsync和inotify实现实时同步
- 线程池ThreadPoolExecutor使用简介
- 2016.8.24--字符串匹配
- JavaScript红宝书笔记:(第四章)变量、作用域、内存
- 线上机器没有开coredump情况下的查错