频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
集合入门介绍第四章——Map集合
2016-10-11 09:09:32         来源:Gerry的写意人生  
收藏   我要投稿

还是先从API文档的介绍看起:

这里写图片描述
Map:
1、一次添加一对元素,Collection一次添加一个元素
2、存储键(可理解为关键字)值对
3、每个键是唯一的

因为Map集合和Collection存储的数据形式是不同的,所以Map集合相应操作元素的方法和Collection集合会有所不同,接下来会列出来Map与Collection集合不同的而值得注意的方法。

Map集合
添加方法是:V put(Key, Value)
返回以前与 key 关联的值,如果没有返回null。
删除:V remove(Key)
如果存在一个键的映射关系,则将其从此映射中移除,返回以前与 key 关联的值;
如果没有 key 的映射关系,则返回 null。
判断: boolean containsKey(Key)
Boolean containsValue(Value)
获取:
Value get(Key):通过键获取值,如果没有则返回null。
这个方法可以与List集合E get(index)做个比较,
List集合是通过角标(索引)来确定元素所在位置后,
然后将该位置的元素取出,Map集合有点类似但有着本质的区别,
Map集合先将找到对应的键值,然后获取这个键所映射的值。

现在可以做个简单的应用。
定义一个MapTest类具体代码如下:

package com.java.map;
import java.util.HashMap;
import java.util.Map;

public class MapTest {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void main(String[] args) {
        Map map = new HashMap();
        //put方法返回以前与Key关联的值,第一次键"1"对应"张三",没有以前的值所以返回为空。
        System.out.println(map.put("1", "张三"));
        //第二次键"1"对应"赵六",返回以前的值是第一次的"张三",所以输出"张三"
        System.out.println(map.put("1", "赵六"));
        map.put("2", "李四");
        map.put("3", "王五");
        System.out.println(map);
        for(int i = 1; i < map.size()+1; i++){
            System.out.println(map.get(""+i));
        }
        System.out.println("删除:" + map.remove("1"));

        System.out.println(map);
    }
}

测试结果:

这里写图片描述

Map集合的输出和Collection集合不同,它是以 {Key=Value,...}形式输出。

上个例子,之所以能够用for循环取值,是因为键值有规律可循,若是,键值没有规律呢,由该如何获取?

接下来开始重点介绍如何获取map中的元素。

第一种方法:通过keySet方法获取map中所有的键所在的集合,
再通过Set的迭代器获取到一个键,再由键获取值。

依然在MapTest中测试,具体代码如下:

Map map = new HashMap();
      map.put("1", "张三");
        map.put("2", "李四");
        map.put("3", "王五");
      Set keySet = map.keySet();
        Iterator it = keySet.iterator();
        while(it.hasNext()){
            String key = (String) it.next();
            String value = (String) map.get(key);
            System.out.println(key + "=" + value);
        }

测试结果如下:

这里写图片描述
第二种方法:Map集合的另外一个方法entrySet

该方法将键和值的映射关系作为对象存储到了Set集合中,而其这个映射关系的类型就是Map.Entry类型。

依然在MapTest里做测试,将之前的keySet方法替换为entrySet,具体代码如下:

Set<map.entry<string, string="">> entrySet = map.entrySet();
        Iterator<map.entry<string, string="">> it = entrySet.iterator();
        while(it.hasNext()){
            //迭代键值关系对象
            Map.Entry<string, string=""> mapEntry = it.next();
            //从键值关系对象获取键
            String key = mapEntry.getKey();
            //获取值
            String value = mapEntry.getValue();
            System.out.println(key + "=" + value);
        }

Map集合常用方法都介绍完了,接下来开始介绍其子类。
HashMap:

这里写图片描述

HashMap简单测试就不写了,将上面例子
Map map = new HashMap();改为
HashMap hasMap = new HashMap();即可。

TreeMap:

这里写图片描述

根据定义知道

  TreeMap有两种排序:
 1、根据键的自然顺序排序
 2、根据TreeMap自身的比较器来排序

发现和TreeSet排序方式是一致的。接下来做个简单测试,同样用上Student类。具体代码如下:

package com.java.map;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import com.java.entity.Student;
public class TreeMapTest {
    public static void main(String[] args) {    
        TreeMap<student, string=""> treeMap = new TreeMap<student, string="">();
        treeMap.put(new Student(3, "张三"), "上海");
        treeMap.put(new Student(1, "李四"), "北京");
        treeMap.put(new Student(2, "王五"), "广州");
        Iterator<map.entry<student, string="">> it = treeMap.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<student, string=""> mapEntry = it.next();
            Student student = mapEntry.getKey();
            String address = mapEntry.getValue();
            System.out.println(student + "="  + address);
        }
    }
}

测试结果:

这里写图片描述

从结果图看出来,是符合要求的,Student类在之前实现了Comparable接口,具备了自然顺序,在compareTo中方法是按照先sId排序后姓名排序,而结果是按照sId排序,所以是正确的。

接下来我们应用比较器,还是用之前定义好的ComparatorByName比较器。

在TreeMap构造方法中添加ComparatorByName对象。
即将

TreeMap<student, string=""> treeMap = new TreeMap<student, string="">();

改为

TreeMap<student, string=""> treeMap = new TreeMap<student, string="">(new ComparatorByName());

测试结果如下:

这里写图片描述

发现TreeMap存储元素是按照Student类的name属性。
至此Java中的集合框架常用的接口和实现类都介绍完。

点击复制链接 与好友分享!回本站首页
上一篇:【数据结构】算法4.9-4.14 建立词索引表
下一篇:Qt之实现录音播放及raw(pcm)转wav格式
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站