Map集合基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StillOnMyWay/article/details/77750829
  1. map接口存储的是键与值之间的映射关系,简单理解就是一存就会存一组(Key与Value两个对象)。比如学号与姓名: Map<0002,张三>

  2. 键是具有唯一性的,如果集合中已经存在0002学号,那么再次存入一个0002键,它的值会被存入并且覆盖掉旧值,该集合中的0002键始终只会指向一个值,不会指向多个。不过多个键的值相同是有可能的。

  3. map中的方法相对还是较少的,增删改查等等基本方法。
    3.1 增,改: put(K key, V value) (K,V为泛型,任何对象均可添加)
    3.2 删: remove(Object key) 根据Key删除一条映射关系,clear( ) 删除所有
    3.3 查:containsKey(Object key),containsValue(Object value) 判断集合中是否含有该键或者值,返回为boolean

  4. Map接口有两个常用实现类,TreeMap和HashMap,顾名思义,一个为存储方式为二叉树,另一个为哈希表 。

  5. 取出map集合中的元素,有两种方法,entrySet( ) 和 keySet( ),用代码解释。enrtySet( )较为复杂点,返回的是一个Map.Entry关系类,它包含了map集合中的映射关系,提供了getKey( )和getValue( )方法,可以很方便的获取到键和值。

import java.util.*;

class HashMapDemo2 {
    public static void main(String[] args) {
        Map<Student,String> map = new HashMap<Student,String>();
        map.put(new Student("zhangsan",18),"Hangzhou");
        map.put(new Student("lisi",20),"Wuhan");
        map.put(new Student("lisi",22),"Beijing");
        map.put(new Student("wangwu",25),"Nanjing");
        map.put(new Student("zhaoliu",30),"Shanghai");
        map.put(new Student("zhaoliu",30),"Shanghai");

        // 1. Map集合的keySet()方法,返回为Set,存储了Map中的所有键,此处为Student
        Set<Student> set = map.keySet();
        Iterator<Student> i2 = set.iterator();

        while (i2.hasNext()) {
            Student stu = i2.next();
            String addr = map.get(stu);
            System.out.println(stu + "..." + addr);
        }


        // 2. Map集合的entrySet()方法,返回也是Set
        //    但是存储的是一个特殊的泛型Map.Entry<K,V> 
        //    这是Map中的一个内部类,用来描述Map中键,值之间映射关系.
        Set<Map.Entry<Student, String>> m = map.entrySet();
        Iterator<Map.Entry<Student,String>> i = m.iterator();

        while (i.hasNext()) {
            Map.Entry<Student, String> me = i.next();
            System.out.println(me.getKey().getName() + " " + me.getKey().getAge() + " " + me.getValue());
        }
    }
}

class Student implements Comparable<Student>{
    private String name;
    private int age;

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    public int hashCode() {
            return name.hashCode() + age * 19;
    }


    public boolean equals(Object obj) {
        if (!(obj instanceof Student)) {
            return false;
        } else {
            Student s = (Student) obj;
            return this.name.equals(s.name) && this.age == s.age;
        }
    }

    public int compareTo (Student s) {
        int num = this.age - s.age;
        if (num == 0) {
            return this.name.compareTo(s.name);
        }
        return num;
    }

    public String toString() {
        return name + "---" + age;  
    }
}

猜你喜欢

转载自blog.csdn.net/StillOnMyWay/article/details/77750829