java加强 -Map集合

Map集合是双列集合,也叫键值对集合。

Map集合的所有键是不允许重复的,但值可以重复,键和值是一一对应的,每一个键只能找到自己对应的值。(值可以重复)当需要存储一一对应的数据时,就可以使用Map集合。

Map集合也具有多种实现类,常见的有HashMap、TreeMap、LinkedHashMap

注:Map系列的集合特点是由键决定的,值只是一个附属品,值不做要求

HashMap:无序、不重复、无索引;

LinkedHashMap:有序、不重复、无索引

TreeMap:按大小默认升序排列、不重复、无索引

package MapDemo;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class MapDemo1 {
    public static void main(String[] args) {
        //认识Map集合的体系特点
        //键值对都可以是null
        //HashMap:无序、不重复、无索引
        Map<String,Integer> map = new HashMap<>();  //一行经典代码
        map.put("嫦娥", 20);
        map.put("小九", 31);
        map.put("女儿国国王", 29);
        map.put("大乔", 18);
        map.put("大乔", 18);
        map.put("铁扇公主", 31);
        map.put(null, null);
        System.out.println(map);
        System.out.println("==============");
        //LinkedHashMap:有序、不重复、无索引
        Map<String,Integer> map2 = new LinkedHashMap<>();
        map2.put(null, null);
        map2.put("嫦娥", 20);
        map2.put("小九", 31);
        map2.put("女儿国国王", 29);
        map2.put("大乔", 18);
        map2.put("大乔", 18);
        map2.put("铁扇公主", 31);
        System.out.println(map2);
    }
}

Map集合的常见方法

package MapDemo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo2 {
    public static void main(String[] args) {
        //掌握Map的常用方法
        //键不能重复
        Map<String, Integer> map = new HashMap<>();
        map.put("嫦娥", 20);
        map.put("小九", 31);
        map.put("女儿国国王", 29);
        map.put("大乔", 18);
        System.out.println(map.put("大乔", 28));      // 返回被替换的值
        map.put("铁扇公主", 31);
        map.put(null, null);
        System.out.println(map);
        System.out.println("==============");
        //写代码演示常用方法
        System.out.println(map.get("大乔"));//根据键取值
        System.out.println(map.get("大乔2"));
        System.out.println(map.containsKey("大乔"));//判断键是否存在true
        System.out.println(map.containsKey("大乔2"));//false
        System.out.println(map.containsValue(31));//判断值是否存在true
        System.out.println(map.containsValue(28.0));//false
        System.out.println(map.remove("大乔"));//根据键删除键值对,返回被删除的值
        System.out.println(map);
        //map.clear(); //清空map
        System.out.println(map.isEmpty());//判断map是否为空
        System.out.println(map.size());//获取map长度
        //获取所有键,放到一个Set集合,返回给我们
        Set<String> keys = map.keySet();//与Set特性一样,不重复,无索引
        for (String key : keys) {
            System.out.println(key);
        }
        //获取所有值,放到一个Collection集合,返回给我们
        Collection<Integer> values = map.values();  //值可能会重复,所以要放到Collection集合
        for (Integer value : values) {
            System.out.println(value);
        }
    }
}

与Collection类似,Map集合也有添加,删除,获取长度,判空,清空等方法

Map集合的遍历

Map集合有三种常见的遍历方法

1、键找值,将Map集合中的键通过以上的常用方法中的转换键值到Set集合中,用键来找对应的值。

2、键值对,将Map集合中的所有元素转换为键值对类型存储到Set集合中,进行遍历

3、forEach方法,调用java库中的forEach方法进行遍历(其实也是用库里的代码进行键值对类型的转换)

示例

1、键找值

package MapDemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapTraverseDemo1 {
    public static void main(String[] args) {
        //掌握Map集合的遍历方式1、键找值
        Map<String,Integer> map = new HashMap<>();
        map.put("嫦娥", 20);
        map.put("小九", 31);
        map.put("女儿国国王", 29);
        map.put("大乔", 18);
        System.out.println(map);
        //1、提取Map集合的所有键到Set集合中
        Set<String> keys = map.keySet();
        System.out.println(keys);
        //2、遍历Set集合,得到每一个键
        for (String key : keys) {
            //3、根据键获取值
            Integer value = map.get(key);
            System.out.println(key + "=" + value);
        }
    }
}

2、键值对

package MapDemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapTraverseDemo2 {
    public static void main(String[] args) {
        //掌握Map集合的遍历方式2、键值对
        Map<String,Integer> map = new HashMap<>();
        map.put("嫦娥", 20);
        map.put("小九", 31);
        map.put("女儿国国王", 29);
        map.put("大乔", 18);
        System.out.println(map);
        //1、把Map集合转换成Set集合,里面的元素类型都是键值对类型(Map.Entry<String,Integer>)
        Set<Map.Entry<String,Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            //2、得到每一个键值对
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + "=" + value);
        }
    }
}

3、forEach并Lambda简化

package MapDemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class MapTraverseDemo3 {
    public static void main(String[] args) {
        //掌握Map集合的遍历方式3、Lambda遍历
        Map<String,Integer> map = new HashMap<>();
        map.put("嫦娥", 20);
        map.put("小九", 31);
        map.put("女儿国国王", 29);
        map.put("大乔", 18);
        System.out.println(map);
        //1、直接调用Map集合forEach方法完成遍历
//        map.forEach(new BiConsumer<String, Integer>() {
//            @Override
//            public void accept(String s, Integer integer) {
//                System.out.println(s + "=" + integer);
//            }
//        });
        map.forEach((k,v)->{
            System.out.println(k + "=" + v);
        });
    }
}

项目实战

做一个景区投票系统,对所有人想去的景区投票,选出票数最多的景区

package MapDemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class MapDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<String,Integer> map = new HashMap<>();
        map.put("A",0);
        map.put("B",0);
        map.put("C",0);
        map.put("D",0);
        while(true)
        {
            System.out.println("请输入想去的景点,若所有学生选择完毕输入EXIT");
            String s = sc.next();
            if(map.containsKey(s))
            map.put(s, map.get(s)+1);
            else if(!s.equals("EXIT")) map.put(s, 1);
            if(s.equals("EXIT"))
            {
                String maxkey  = "";
                int maxvalue = 0;
                for(Map.Entry<String,Integer> entry:map.entrySet())
                {
                    String key = entry.getKey();
                    Integer value = entry.getValue();
                    if(value>maxvalue)
                    {
                        maxvalue = value;
                        maxkey = key;
                    }
                    System.out.println(key+"="+value);
                }
                System.out.println("最多人选的景点是"+maxkey+",有"+maxvalue+"人选");
                break;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值