Java集合框架----Map

Map

今天学习的主要内容是Map,下面来进行总结一下:
HashMap:
他通过映射关系来确定k和v的对应关系。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。其中在映射关系中k是key的意思,v是value的意思,在Map中K的值即键值是不能重复的,Map中的每一个元素都以其键值来确定他的唯一性,所以类似的Map和Set一样都是不允许重复值的出现的。每一个键值key都对应一个value值,而同样的一个value值都有他所对应的那个key值相对应。需要特别注意的是:在集合框架Map中,键值key是唯一的,但是value是可以重复的,且可以为null。
实现关系
下面看一下Map的具体使用:
一:HashMap
HashMap是基于哈希表中的Map接口实现的,此实现提供了所有的可选的映射操作,而且不保证映射的顺序,(他的映射顺序是由内部的哈希算法计算出的哈希值所确定的)
实例一:

要求:将5葫芦娃按照1到5的键值顺序依次放置进HashMap中,并且查询是否有大娃,如果有,就将大娃替换成蛇精。

public class Test {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "四娃");
        map.put(2, "大娃");
        map.put(3, "二娃");
        map.put(4, "三娃");
        map.put(5, "六娃");
        boolean flag = map.containsValue("大娃");
        if (flag) {
            for (int i = 0; i < map.size(); i++) {
                String value = map.get(i);
                if ("大娃".equals(value)) {
                    map.put(i, "蛇精");
                }
            }
            System.out.println("修改已完成");
        }else {
            System.out.println("不存在value为大娃的值");
        }
        System.out.println(map);
        }
    }

运行效果如下图:
这里写图片描述
如图,使用HashMap对象的containsValue()方法,先进行判断是否有这个value值的元素。再使用for循环进行遍历,使用map的方法get()进行提取value值,同时进行equals判断,随即,put方法使用同样的键值进行元素的覆盖,完成替换。

在遍历Map内部的元素的时候,还有两个方法,进行使用:
方法二:


public class Test {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "四娃");
        map.put(2, "大娃");
        map.put(3, "二娃");
        map.put(4, "三娃");
        map.put(5, "六娃");


        Set set = map.keySet();//迭代器在Map中不能使用,必须使用set的迭代器方法
        for (Iterator it = set.iterator();it.hasNext();) {
            int i =  (Integer) it.next();
            String str = map.get(i);
            System.out.println(i+"====="+str);
        }
        }
    }

方法总结:
1:使用KeySet方法获取到键值的视图=====注意出来的视图只是所有的键值
2:使用迭代器进行遍历。
3:在进行迭代器迭代的时候,需使用get方法,返回每一个键值所对应的value值。
运行结果如下图:
这里写图片描述
使用的HashMap的对象map的keySet方法,返回的是这个map映射中的键值的视图,返回的形式是一个Set类集合框架的对象,同时,接下来使用迭代器进行迭代遍历,,根据在创建HashMap的时候设定的泛型所以it.next()出来的对象是一个Integer类的对象,所以强制转换的类型应该是Integer,之后在使用get方法将value值取出来。

方法三:

public class Test {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "四娃");
        map.put(2, "大娃");
        map.put(3, "二娃");
        map.put(4, "三娃");
        map.put(5, "六娃");

        Set set = map.entrySet();
        //可以直接输出这个set视图,或者使用迭代器进行迭代输出。System.out.println(set);
        for (Iterator it = set.iterator();it.hasNext();) {
            Entry en = (Entry) it.next();
            int k = (Integer) en.getKey();
            String value = (String) en.getValue();
            System.out.println(k+"====="+value);
        }
        }
    }

上述第三个方法的执行效果和第二个方法的一样,下面总结一下第三个方法。(开发中普遍使用这一种方式)
1:使用map对象调用方法entrySet(),返回一个包含映射关系的视图,他的返回值类型是Set集合框架。
2:使用set对象创建迭代器,进行迭代。
3:it.next()的返回值类型是一个Entry类的对象,需要进行强制类型转换。
4:在Entry类的对象中有两个方法,一个是getValue();另一个是getKey()。她们分别用于获取Entry类对象的Value值和Key值。

上述三个方法需要进行了解,对第三个方法需要熟练地运用,这些都需要多加练习。

猜你喜欢

转载自blog.csdn.net/sun_DongLiang/article/details/81088069