Map接口实例

Map接口实例
 1,User类

package com.example20.collection;

public class User {
    public static final String HAERBIN = "哈尔滨";
    public static final String BEIJING = "北京";
    private int id;
    private String name;
    private String city;

    public User() {
    }
    public User(String name) {
        this.name = name;
    }
    public User(int id, String name, String city) {
        this.id = id;
        this.name = name;
        this.city = city;
    }
    public int getId() {
        return id;
    }

    public String getCity() {
        return city;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

 2,MapTest类

package com.example20.collection;

import java.util.*;

public class MapTest {
    private static final List<User> USERS = create();
    private static User[] users;

    private static List<User> create() {
        //创建了四个人,分别由身份信息,名字,城市名称
        User u = new User(1, "BO", User.HAERBIN);
        User u1 = new User(2, "SUN", User.BEIJING);
        User u2 = new User(3, "ZHANG", User.BEIJING);
        User u3 = new User(4, "LIU", User.HAERBIN);
        List<User> users = new ArrayList<>();
        users.add(u);
        users.add(u1);
        users.add(u2);
        users.add(u3);
        return users;
    }

    public static void main(String[] args) {
        //putMapBase();
        //getMap();
        //putListValue();
        putListValue2();
        //getMapStringKey();
    }

    /**
     * 创建基本键值对;获取
     */
    private static void putMapBase() {
        //前面申请泛型类型了,所以后米的尖括号内就不用写泛型的类型了
        Map<String, String> map = new HashMap<>();
        map.put("BO", "956");   //添加键值对,键和值都应该是字符串
        map.put("SUN", "925");
        System.out.println(map.size());
        System.out.println(map.get("BO"));
        map.put("BO", "1201");
        System.out.println(map.get("BO"));
    }

    /**
     * 以集合中user对象的ID为key,user对象本身为value
     * size();get();
     * 指定的key没有value?
     */
    private static void getMap() {
        //int的引用类型就是Integer
        Map<Integer, User> map = new HashMap<>();
        for (User u : USERS) {
            //put的是以id作为键,以User对象作为值
            map.put(u.getId(), u);
        }
        System.out.println(map.size()); //输出:4
        System.out.println(map.get(1).getCity());  //输出:哈尔滨
        System.out.println(map.get(100).getCity()); //因为没有100,所以会返回一个空,导致一个空指针的产生
    }

    /**
     * 以城市名称为key,以居民为value
     * 每个城市住着多个人?
     */
    private static void putListValue() {
        List<User> hList = new ArrayList<>();
        //集合hList是将家在哈尔滨的放入一个集合
        hList.add(USERS.get(0));
        hList.add(USERS.get(3));
        //集合hList是将家在北京的放入一个集合
        List<User> bList = new ArrayList<>();
        bList.add(USERS.get(1));
        bList.add(USERS.get(2));
        Map<String, List<User>> map = new HashMap<>();
        //因为我们向map里面装入的是集合,所以一共我们就放入了两个集合一个集合是哈尔滨一个是北京
        //以城市名称为键,将城市所对应的集合作为值
        map.put(User.HAERBIN, hList);
        map.put(User.BEIJING, bList);
        System.out.println(map.size());  //输出:2
        //因为我们集合内装的是两个城市的集合所以最后的结果是2

        for (User u : map.get(User.BEIJING)) {
            System.out.println(u.getName()); // 输出:SUN ZHANG
            //打印集合内的人的姓名
        }
    }

    /**
     * 遍历User List集合,以城市名称为key,对应的居民集合为value自动分组。
     * 即,遍历的同时基于不确定的城市名称,创建对应集合,再分组
     */
    private static void putListValue2() {
        //创建键值为字符串,值为字符串的列表的map
        Map<String, List<String>> map = new HashMap<>();

        //循环遍历用户列表
        for (User u : USERS) {
            //判断当前键值是否存在当前键值
            if(map.get(u.getCity()) == null) {
                //不包含则创建一个列表,用来存储住在某地的人们
                List<String> TList = new ArrayList<>();
                TList.add(u.getName());
                map.put(u.getCity(),TList);
            }
            else{
                //如果已经包含了,那么就只需要对后面对应的值进行修改就行了
                map.get(u.getCity()).add(u.getName());
            }
        }
        //最后遍历输出
        for (String key:map.keySet()){
            System.out.println(key + "  " + map.get(key));
        }
    }

    /**
     * 字符串key的特殊性
     */
    private static void getMapStringKey() {
        //声明两个字符串变量
        String n = new String("BO");
        String n2 = new String("BO");
        //比较n和n2的值相不相等
        System.out.println(n.equals(n2));   //输出:true
        //比较n和n2是不是相同的对象
        System.out.println(n == n2);        //输出:false
        Map<String, String> map = new HashMap<>();
        map.put(n, "956");
        System.out.println(map.get("BO"));  //输出956
        map.put(n2, "925");
        System.out.println(map.size());     //输出:1
        //因为相同的键(判断键的时候是直接基于字符串值,而非对象的hash值),所以第一个被覆盖掉了。
        System.out.println(map.get("BO"));  //输出:925
    }

    private static void getKeySet() {
        User user = new User(1, "BO", "哈尔滨");
        User user2 = new User(2, "SUN", "北京");
        User user3 = new User(3, "ZHANG", "上海");
        Map<Integer, User> uMap = new HashMap<>();
        uMap.put(user.getId(), user);
        uMap.put(user2.getId(), user2);
        uMap.put(user3.getId(), user3);
        Set<Integer> nMapKeys = uMap.keySet();
        for (int i : nMapKeys) {
            System.out.println(i);
        }
    }

    /**
     * Map不支持foreach语句
     */
    private static void remove() {
        Map<Integer, User> uMap = new HashMap<>();
        for (User u : USERS) {
            uMap.put(u.getId(), u);
        }
        uMap.remove(1);
        System.out.println(uMap.size());
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值