JavaSE学习:第二十五章02、集合(Map接口)

在这里插入图片描述

1、细节:

package hsf.com.map_;/*
 * @author HSF
 * @version 8.0
 */

import javax.sound.midi.Soundbank;
import java.sql.SQLOutput;
import java.util.HashMap;
import java.util.Map;

@SuppressWarnings({"all"})
public class First_ {
    public static void main(String[] args) {
        // 1、map用于保存具有映射关系的数据:key-value
        // 2、map中的key 和 value可以是任何类型数据,会封装到HashMap$Node对象中
        // 3、Map 中的 key 不允许重复
        // 4、value可以重复。
        // 5、key 和 value 都可以是 null。
        // 6、常用String类作为Map的key。
        // 7、key 和 value 存在一对一关系,可以通过指定的 key 找到对应的value。
        Map map = new HashMap();
        map.put("Num1", "北京");
        map.put("Num2","上海");
        map.put("Num2", "广州"); // key一样相当于替换
        map.put(null, null);
        map.put(null, "abc");
        map.put(1, "张三");
        map.put(new Object(), "李四");
        System.out.println(map);
        System.out.println(map.get("Num2"));
    }
}

2、常用方法:

public static void main(String[] args) {
        Map map = new HashMap();
        // 1、put:添加元素
        map.put("Num1", "北京");
        map.put("Num2","上海");
        map.put("Num3", "广州");
        // 2、remove:根据 value 删除元素
        System.out.println(map.remove("Num2"));  // 上海
        // 3、get:根据 value 获取值
        System.out.println(map.get("Num1")); // 北京
        // 4、size获取元素个数。
        System.out.println(map.size()); // 2
        // 5、isEmpty:判断个数是否为0
        System.out.println(map.isEmpty()); // false
        // 6、clear:清除所有元素
        // 7、containsKey:查找键是否存在
        System.out.println(map.containsKey("Num3")); true
    }

3、map接口遍历:

package hsf.com.map_;/*
 * @author HSF
 * @version 8.0
 */

import java.util.*;

public class Second_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("Num1", "北京");
        map.put("Num2","上海");
        map.put("Num3", "广州");

        // 第一组方法:先获取key,通过key取到对应的value。
        // 返回值是一个Set类型,因此可以用增强for、迭代器
        // (1)、增强for
        Set keySet = map.keySet();
        System.out.println(keySet);  // [Num3, Num2, Num1]
        for (Object key : keySet) {
            System.out.println(key + " " + map.get(key));
        }
        // (2)、迭代器
        Iterator iterator = keySet.iterator();
        while (iterator.hasNext()) {
            Object key =  iterator.next();
            System.out.println(key + " " + map.get(key));
        }

        // 第二组:把所有的values取出来
        // 返回类型是Collection,可以使用增强for、迭代器、for循环三种方法。
        Collection values = map.values();
        System.out.println(values); // [广州, 上海, 北京]

        // 第三组:使用EntrySet来获取key-value,EntrySet的getKey()和getValue()方法
        Set entrySet = map.entrySet();
        /*
        可以把entrySet看做是一个数组,entry是里面的每一个元素。
        * 1、System.out.println(entrySet); [Num3=广州, Num2=上海, Num1=北京]
        * 2、System.out.println(entry); Num3=广州, Num2=上海, Num1=北京
        *  */
        System.out.println(entrySet);
        // (1)、增强for
        for (Object entry : entrySet) {
            // 向下转型:

            System.out.println(entry + "~");
            Map.Entry m = (Map.Entry) entry;
            System.out.println("======");
            System.out.println("map.entry" + m);
            System.out.println(m.getKey() + " " + m.getValue());
        }
        // (2)、迭代器:
        Iterator iterator1 = entrySet.iterator();
        while (iterator1.hasNext()) {
            Object entry =  iterator1.next();
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + " " + m.getValue());

        }
    }
}

package hsf.com.map_;/*
 * @author HSF
 * @version 8.0
 */

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

public class Test {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("Num1", "北京");
        map.put("Num2","上海");
        map.put("Num3", "广州");

        Set entrySet = map.entrySet();  // EntrySet<Map.Entry<k,v>>
        // [Num3=广州, Num2=上海, Num1=北京]
//        System.out.println(entrySet);
        for (Object entry : entrySet) {
            System.out.println(entry);
            /*
            Num3=广州
            Num2=上海
            Num1=北京
            * */
            // 将entry转成 Map.Entry
            // Map.Entry里面有两个方法:getKey和getValue
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + " " + m.getValue());
            /*
            Num3 广州
            Num2 上海
            Num1 北京
            * */

        }
    }
}

作业:遍历工资大于15000的工人:

package hsf.com.map_;/*
 * @author HSF
 * @version 8.0
 */

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

public class HomeWork_ {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("Num1",new Emp("tom", 20000, 1));
        map.put("Num2",new Emp("mary", 30000, 2));
        map.put("Num3",new Emp("jack", 10000, 3));

        // 1、增强for循环
        Set keySet = map.keySet();
        for (Object key : keySet) {
            // 向下转型获取Emp的getSal值
            Emp emp = (Emp) map.get(key);
            if (emp.getSal() > 15000) {
                System.out.println(map.get(key));
            }
        }
        // 2、EntrySet迭代器:
        Set entrySet = map.entrySet();
        Iterator iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            // 第一次转型:为了获得value值
            Map.Entry entry =  (Map.Entry)iterator.next();
            // 第二次转型:为了获得getSal值
            Emp emp = (Emp) entry.getValue();
            if (emp.getSal() > 15000) {
                System.out.println(emp);
            }
        }
    }
}

class Emp {
    private String name;
    private double sal;
    private int id;

    public Emp(String name, double sal, int id) {
        this.name = name;
        this.sal = sal;
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public double getSal() {
        return sal;
    }

    public void setSal(double sal) {
        this.sal = sal;
    }

    public int getId() {
        return id;
    }

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

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", sal=" + sal +
                ", id=" + id +
                '}';
    }
}

HashMap扩容机制:
在这里插入图片描述

HashTable:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Properties

在这里插入图片描述

总结:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值