java学习Day09 Map

本文详细介绍了Java中的Map和Collection数据结构,重点讲解了Map的特性如键值对一对一关系、键不允许重复、值可重复以及常用实现类如HashMap。还涉及了Set和EntrySet的区别以及Map的常见操作方法。
摘要由CSDN通过智能技术生成

在这里插入图片描述

java学习Day09 Map

Map 和 Collection

public class Map_ {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        /*
        1.Map和Collection并列存在Map是 双列,Collection是单列
          Map存放的是Key Value          Collection存放Key Value是固定的Present
        2.Key和Value可以是任何引用类型 会封装到HashMap$Entry
        Set和Collection的value还是存放在Entry只是指向HashMap$Node
        3.Key不允许重复 如果就重复就替换 在Set里是不换替换的
        4.Value可以重复
        5.常用string类作为Key 其实也可以用任意Object子类
        6.K V一对一对应的关系 通过Key返回对应的Value

        */
        Map map = new HashMap();
        map.put("no1","arthur");
        map.put("no2","dutch");
        map.put("no2","alice");
        map.put("no3","alice");
        map.put(null,null);
        map.put(null,"john");
        map.put("no4",null);
        map.put("no5",null);
        map.put(new Object(),"sadie");

        System.out.println(map);
        System.out.println(map.get("no3"));

    }
}

Map源码

public class MapSource {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","arthur");
        map.put("no2","dutch");
        /*
        1.K-V最后存放在HashMap$Node node = new Node();
        2.为了方便遍历还会创建EntrySet 该集合存放的类型是Entry
          1个Entry对象就有KV EntrySet<Entry<K,V>>; transient Set
        3.在entrySet中 定义的类型是Map.Entry 但存放的还是HashMap$Node
          因为HashMap$Node 实现Map.Entry
        4.当把HashMap$Node对象存放到entrySet里方便遍历 因为
          Map.Entry提供了2个重要方法getKey和getValue
        5.set 存放的是Key 可以用keySet调用  Collection存放的是Value 可以用values调用
         */
        Set set = map.entrySet();
        System.out.println(set.getClass());//HashMap$EntrySet
        for (Object o :set) {
//            System.out.println(entry.getClass());
            /*
            从HashMap$Node取出K-V
            向下转型
            */
            Map.Entry entry = (Map.Entry) o;
            System.out.println(entry.getKey()+" "+entry.getValue());

        }

    }

Map常用方法

public class MapMethod {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("john",new book("",120));
        map.put("john","dutch");
        map.put("baoq","mr");
        map.put("songz","mr");
        map.put("arthur",null);
        map.put(null,"yifei");
        map.put("mm","xt");

        System.out.println(map);

        map.remove(null);//通过key移除元素
        System.out.println(map);
        System.out.println(map.get("mm"));//通过key找到元素
        System.out.println(map.size());//得到map的元素对数
        System.out.println(map.isEmpty());//判断是否为空
        map.clear();//清除
        System.out.println(map.containsKey("mr"));//判断是否包含
    }
}
class book{
    private String name;
    private int num;

    public book(String name, int num) {
        this.name = name;
        this.num = num;
    }
}

Map循环

public class MapFor {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("john",new book("",120));
        map.put("john","dutch");
        map.put("baoq","mr");
        map.put("songz","mr");
        map.put("arthur",null);
        map.put(null,"yifei");
        map.put("mm","xt");

        //通过Key遍历 先取出所有的Key 在取出所有的Value
        Set keySet = map.keySet();
        for (Object key :keySet) {
            System.out.println(key+" "+map.get(key));
        }
        System.out.println("==================");
        //迭代器 获取key
        Iterator iterator = keySet.iterator();
        while (iterator.hasNext()) {
            Object key = iterator.next();
            System.out.println(key+" "+map.get(key));
        }
        //不关心key 取出所有Value
        Collection values = map.values();
        //三种Collection遍历方式
        for (Object value :values) {
            System.out.println(value);
        }
        Iterator iterator1 = values.iterator();
        while (iterator1.hasNext()) {
            Object key = iterator1.next();
            System.out.println(key);
        }
//        for (int i = 0; i < values.size(); i++) {
//            System.out.println(values(i));
//        }
        //通过EntrySet遍历好处只需要访问一次 keyset遍历访问2次
        System.out.println("==================");
        Set entrySet = map.entrySet();
        for (Object entry :entrySet) {
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey()+" "+m.getValue());
        }
        Iterator iterator2 = entrySet.iterator();
        while (iterator2.hasNext()) {
            Object entry = iterator2.next();
            Map.Entry m =(Map.Entry) entry;
            System.out.println(m.getKey()+" "+m.getValue());
        }
    }
}

MapExercise

//加入三个员工到Map集合里要求id代表key 年龄名字薪水id代表Value

public class MapExercise {
    public static void main(String[] args) {
        Map hashMap = new HashMap();
        hashMap.put(1,new employee("alice",10,50000,1));
        hashMap.put(2,new employee("sadie",9,6000,2));
        hashMap.put(3,new employee("violet",12,70000,3));

        Set set = hashMap.keySet();
        for (Object key :set) {
            //下方是调用Employee类定义的数据Employee 再把key向下转型调用get方法得到薪水
            employee employee= (com.yuhuw.collection.map.employee) hashMap.get(key);
            if (employee.getSar() >18000) {
                System.out.println(employee);

            }
        }


        Set entrySet = hashMap.entrySet();
        for (Object entry :entrySet) {
            Map.Entry map = (Map.Entry) entry;
            employee employee = (com.yuhuw.collection.map.employee) map.getValue();
            if (employee.getSar() >18000) {
                System.out.println(employee);
            }

        }
        System.out.println("====================");
        Iterator iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Object entry= iterator.next();
            Map.Entry map = (Map.Entry) entry;
            employee employee = (com.yuhuw.collection.map.employee)  map.getValue();
            if (employee.getSar() >18000){
                System.out.println(employee);
            }
        }
    }
}
class employee{
private String name;
private int age;
private double sar;
private int id;

    public employee(String name, int age, double sar, int id) {
        this.name = name;
        this.age = age;
        this.sar = sar;
        this.id = id;
    }

    public double getSar() {
        return sar;
    }

    public void setSar(double sar) {
        this.sar = sar;
    }

    @Override
    public String toString() {
        return "employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sar=" + sar +
                ", id=" + id +
                '}';
    }
}
// HashMap小结
//1)Map接口的常用实现类:HashMap、Hashtable和Properties.
//2) HashMap是 Map接口使用频率最高的实现类。
//3) HashMap是以 key-vaI xH月个la IaS .t
//4) key不能重复,但是值可以重复,允许使用null键和null值。
//5)如果添加相同的key,则会覆盖原来的key-val ,等同于修改.(key不会替换,val会替换)
//6)与HashSet一样,不保证映射的顺序,因为底层是以hash表的方式来存储的.(jdk8的hashMap 底层数组+链表+红黑树)
//7) HashMap没有实现同步,因此是线程不安全的,方法没有做同步互斥的操作,没有synchronized 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值