Java实现有序Map的方法——
来源:互联网 发布:淘宝可以用花呗付款吗 编辑:程序博客网 时间:2024/06/03 14:07
Java实现有序Map的方法
- HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已经按照hashcode排序号了,这种几率非常小)
- 单纯的HashMap是无法实现排序的,这的排序是指,我们将键值对按照一定的顺序put进HashMap里,然后在进行取键值对的操作的时候,是按照put进去的顺序把键值对取出来的。
JAVA在JDK1.4以后提供了LinkedHashMap来帮助我们实现了有序的HashMap!LinkedHashMap取键值对时,是按照你放入的顺序来取的。
package day20;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Map;import java.util.Map.Entry;public class demo7 { public static void main(String[] args) { /** * LinkedHashMap 有序的HashMap */ // Map maps = new LinkedHashMap(); maps.put("1", "张三"); maps.put("2", "李四"); maps.put("3", "王五"); maps.put("4", "赵六"); System.out.println("LinkedHashMap(有序):"); Iterator it = maps.entrySet().iterator(); while (it.hasNext()) { Map.Entry entity = (Entry) it.next(); System.out.println("[ key = " + entity.getKey() + ", value = " + entity.getValue() + " ]"); } // HashMap 无序 Map map = new HashMap(); map.put("1", "张三"); map.put("2", "李四"); map.put("3", "王五"); map.put("4", "赵六4"); map.put("6", "赵六6"); map.put("7", "赵六7"); it = null; System.out.println("HashMap(无序):"); it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entity = (Entry) it.next(); System.out.println("[ key = " + entity.getKey() + ", value = " + entity.getValue() + " ]"); } }}
HashMap,LinkedHashMap,TreeMap应用简介
- 共同点:
HashMap,LinkedHashMap,TreeMap都属于Map;Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。 - 不同点:
- 1、HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
- 2、TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
- 3、LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; public class MapAppTest { /** * @Create on Nov 9, 2009 by lrm */ public static void main(String[] args) { // TODO Auto-generated method stub MapAppTest.noOrder(); MapAppTest.hasOrder(); MapAppTest.likedHashMap(); } public static void noOrder() { System.out.println("------无序(随机输出------"); Map map = new HashMap(); map.put("1", "Level 1"); map.put("2", "Level 2"); map.put("3", "Level 3"); map.put("4", "Level 4"); map.put("F", "Level F"); map.put("Q", "Level Q"); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("Key: " + e.getKey() + "; Value: " + e.getValue()); } } // 有序(默认排序,不能指定) public static void hasOrder() { System.out.println("------有序(但是按默认顺充,不能指定)------"); Map map = new TreeMap(); map.put("F", "Level F"); map.put("7", "Level 1"); map.put("8", "Level 2"); map.put("4", "Level 3"); map.put("4", "Level 4"); map.put("Q", "Level Q"); map.put("E", "Level E"); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("Key: " + e.getKey() + "; Value: " + e.getValue()); } } public static void likedHashMap() { System.out.println("------有序(根据输入的顺序输出)------"); Map map = new LinkedHashMap(); map.put("F", "Level F"); map.put("7", "Level 1"); map.put("8", "Level 2"); map.put("4", "Level 3"); map.put("4", "Level 4"); map.put("Q", "Level Q"); map.put("E", "Level E"); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("Key: " + e.getKey() + "; Value: " + e.getValue()); } } }
原文地址:http://blog.csdn.net/u012889434/article/details/48055679
阅读全文
0 0
- Java实现有序Map的方法——
- 实现key有序的MAP
- java 有序map: LinkedHashMap
- Java有序数组的实现
- Map的有序实现类和无序实现类
- 有序的map LinkedHashMap
- Key有序的Map
- map的有序排放
- 有序的map LinkedHashMap
- 有序的map LinkedHashMap
- JAVA学习笔记31——Map接口+Map常见方法+模拟实现Map(低级版和高级版)
- java实现scala的map方法,实现函数式编程
- 遍历Java Map的方法——Java基础
- java有没有 有序的map,而且可以 修改key
- 【Java集合框架】Map与Set的有序与无序
- java实现两个有序数组的合并
- java实现有序数组的折半查找
- Java通过google map api实现地址解析的方法
- 单例模式之饿汉式
- oracle数据库(序列和存储过程)
- svn: Working copy "E:/workspace/*****" locked.
- zookeeper工作原理
- thinkphp3.2 实现 Phpmailer 发送邮件 配置
- Java实现有序Map的方法——
- android 属性动画用到的属性常量(方便使用
- WSDL:是用于描述WS是什么
- CentOS 7 + Win 双系统的安装遇到的重要问题
- OpenCV--SIFT算法检测特征点
- java连接金仓数据库方法笔记
- 浅谈Zookeeper
- 二分查找
- GNU中__attribute__机制介绍