333333333333

一、Map 接口

        接下来讲的都是基于 jdk8 来开展的。

1.1 特点

        1、Map Collection 并列存在。Map 是用于保存具有映射关系的数据,即 key-value

        2、Map 中的 key value 可以是任何引用类型的数据类型。

        3、Map 中的 key 不允许重复,原因和 HashSet 一样。

        4、Map 中的 value 是可以重复的。

        5、Map 中的 key 可以为 nullvalue 也可以为 null,注意 key null 时只能有一个,value null 时可以有多个。

        6、常用 String 类作为 Map key

        7、key value 之间存在单向一对一关系,即通过指定的 key 总能找到对于的 value

        8、Map 存放数据的 key-value 示意图,一对 key-value 是放在一个 Node 中的,又因为 Node 实现了 Entry 接口,也有人说是一对 key-value 就是一个 Entry

333333333333_第1张图片

1.2 常用实现类

        HashMapHashTableSortedMap(接口)、TreeMap LinkedHashMapProperties 等。

1.3 常用方法

public class TestMap {
    public static void main(String[] args) {
        Map map = new HashMap<>();

        // put 添加元素
        map.put("孙悟空","唐僧");
        map.put("孙悟空","猪八戒");
        map.put("宋江","潘金莲");
        map.put("武大郎","西门庆");
        map.put("曹操",null);
        map.put(null,"荀彧");

        // get 根据 key 获取元素
        Object o = map.get("武大郎");
        // 根据 key 删除元素
        map.remove("宋江");
        // 判断 key 是否存在
        boolean b = map.containsKey(null);
        System.out.println(b);
        // 获取 map 的元素个数
        System.out.println(map.size());
        // 判断 map 元素个数是否为 0
        System.out.println(map.isEmpty());
        // 清除 map
        map.clear();

    }
}

1.4 遍历方式

1.4.1 keySet 方式

public static void main(String[] args) {
	Map map = new HashMap<>();
	map.put("孙悟空","唐僧");
	map.put("武大郎","西门庆");

	// 先取出所有的 key,然后再取出 value
	Set keySet = map.keySet();
	// (1) 使用增强 for 循环
	for (Object obj :keySet) {
		System.out.println(obj+"-"+map.get(obj));
	}
	System.out.println("-----------------------");
	// (2) 迭代器
	Iterator iterator = keySet.iterator();
	while (iterator.hasNext()) {
		Object next =  iterator.next();
		System.out.println(next+"-"+map.get(next));
	}
}

1.4.2 value 值方式

public static void main(String[] args) {
	Map map = new HashMap<>();
	map.put("孙悟空","唐僧");
	map.put("武大郎","西门庆");

	// 只能取出所有的 values
	Collection values = map.values();
	// (1) 增强 for 循环
	for (Object obj :values) {
		System.out.println(obj);
	}
	System.out.println("-----------------------");
	//(2)迭代器
	Iterator iterator1 = values.iterator();
	while(iterator1.hasNext()){
		Object next = iterator1.next();
		System.out.println(next);
	}
}

1.4.3 EntrySet 方式

public static void main(String[] args) {
	Map map = new HashMap<>();
	map.put("孙悟空","唐僧");
	map.put("武大郎","西门庆");
	
	Set set = map.entrySet();
	// (1) 增强 for 循环
	for (Object entry :set) {
		// 将 entry 转换成 Map.Entry
		Map.Entry m = (Map.Entry)entry;
		System.out.println(m.getKey()+"-"+m.getValue());
	}
	System.out.println("-----------------------");
	// (2) 迭代器
	Iterator iterator2 = set.iterator();
	while (iterator2.hasNext()) {
		Map.Entry m=  (Map.Entry) iterator2.next();
		System.out.println(m.getKey()+"-"+m.getValue());
	}
}

1.5 习题练习

        使用 HashMap 添加 3 个员工对象,要求:键为员工 id,值为员工对象。并遍历显示工资 > 18000 员工(遍历方式最少两种)。员工类:姓名、工资、员工 id

class Employee{
    private String id;
    private String name;
    private double salary;

    public Employee(String id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }
   // setter、getter、toString

    @Override
    public String toString() {
        return "Employee{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
}
public static void main(String[] args) {

	Map map = new HashMap();
	Employee e1 = new Employee("1","张三",20000);
	Employee e2 = new Employee("2","李四",8000);
	Employee e3 = new Employee("3","王五",60000);
	map.put(e1.getId(),e1);
	map.put(e2.getId(),e2);
	map.put(e3.getId(),e3);

	Set set = map.keySet();
	for (Object key :set) {
		Employee employee = (Employee)map.get(key);
		if(employee.getSalary()>18000){
			System.out.println(key+"-"+employee);
		}
	}
	System.out.println("--------------");
	Iterator iterator = set.iterator();
	while (iterator.hasNext()) {
		Object key =  iterator.next();
		Employee employee = (Employee)map.get(key);
		if(employee.getSalary()>18000){
			System.out.println(key+"-"+employee);
		}
	}
	System.out.println("--------------");
	Set set1 = map.entrySet();
	for (Object entrySet :set1) {
		Map.Entry entry =  (Map.Entry)entrySet;
		Employee employee = (Employee) entry.getValue();
		if(employee.getSalary()>18000){
			System.out.println(entry.getKey()+"-"+employee);
		}
	}
}

你可能感兴趣的:(java,开发语言)