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

原创粉丝点击