HashMap与TreeMap的排序以及四种遍历方式

一、Map概述

1、Map是将键映射到值( key-value )的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

2、Map与Collection的区别
(1)Map 是以键值对的方式存储元素,键唯一,值可以重复。
(2)Collection存储的是单列元素,子接口Set元素唯一,子接口List可以重复。
(3)Map的数据结构针对键有效,跟值无关,Collection针对元素有效。

3、HashMap 与TreeMap 的创建,排序。

/***
 * Map类的一些简单操作
 * 包括TreeMap的排序,HashMap的排序,四种遍历方式
 * @author Administrator
 *
 */
public class MapTest {
 
    public static void main(String[] args) {
 
        //创建map对象,并赋值
        
        Map<String,String> treeMap = new TreeMap<String,String>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        
        treeMap.put("sufow1", "舒泉1");
        treeMap.put("sufow2", "舒泉2");
        treeMap.put("sufow3", "舒泉3");
        treeMap.put("sufow4", "舒泉4");
        treeMap.put("sufow5", "舒泉5");
        treeMap.put("sufow6", "舒泉6");
        treeMap.put("sufow7", "舒泉7");
        
        System.out.println("TreeMap");
        
        //遍历map 方式一,根据keyset方法获取所有的key,再根据key获取值
        for(String str :treeMap.keySet()){
            String val = treeMap.get(str);
            System.out.println(val);
        }
        
        Map<String,String> hashMap = new HashMap<String ,String>();
        
        
        hashMap.put("sufow1", "舒泉1");//可以写入null值
        hashMap.put("sufow2", "舒泉2");
        hashMap.put("sufow3", "舒泉3");
        hashMap.put("sufow4", "舒泉4");
        hashMap.put("sufow5", "舒泉5");
        hashMap.put("sufow6", "舒泉6");
        hashMap.put("sufow7", "舒泉7");
        
        System.out.println("HashMap");
        
        //先排序
        
        List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>(hashMap.entrySet());
        
        //通过比较器来排序
        Collections.sort(list, new Comparator<Map.Entry<String, String>>() {
            @Override
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
        });
        
        //遍历List,第二种通过Map.Entry
        for(Map.Entry<String, String> m :list){
            String val =  m.getValue();
            System.out.println(val);
        }
        
        //第二种遍历map的方式,根据迭代器Iterator
        Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
        
        while(iterator.hasNext()){
            Map.Entry<String, String> map = iterator.next();
            System.out.println(map.getKey());
            System.out.println(map.getValue());
        }
        
        //第三种通过values,只能遍历value
        for(String str:hashMap.values()){
            System.out.println(str);
        }
        
        
        //第四种,通过Map.Entry
        for(Map.Entry<String, String> map:hashMap.entrySet()){
            System.out.println(map.getKey());
            System.out.println(map.getValue());
        }
    }

4、总结
(1)map排序的两种方式
第一种:通过 new Comparator的接口,实现方法,进行排序。
第二种:先将Map转换成List , 通过Collections的sort方法进行排序。

(2)Map的四种遍历方式
第一种:通过Map的keySet()方法遍历。
第二种:通过Map的values()方法遍历。
第三种:通过Map的entrySet()方法的Iterator方法将转换成Iterator。通过迭代器遍历。
第四种:通过Map的entrySet()方法,将其转换成Map.Entry对象,在通过foreach遍历,通过Map.Entry对象的getValue()获取值。

转自:https://blog.csdn.net/woshimaxiao1/article/details/83754231

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 740评论 0 2
  • Java集合框架 Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述...
    小石38阅读 359评论 0 0
  • 概述 集合框架被设计成要满足以下几个目标: 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必...
    Tian_Peng阅读 367评论 0 1
  • 一、为什么会出现集合类 1.集合是一个容器,为了方便的对多个对象进行操作。 2.集合容器同数组容器的...
    大禹编程扛把子阅读 570评论 0 0
  • 一 Set List Map的定义 1. 什么是set Set的功能方法 Set具有与Collection完全一样...
    史慧君阅读 4,009评论 1 49