java小课堂之Map集合

一:Map集合的概述

 (1)ap集合出现的原因是:一个集合中的元素可能会会属性相同,如姓名,所以为了解决这一个问题所以我们出现了Map类,主要思想是键值相对。
 (2) Map集合
    /接口 Map<K, V >
    类型参数:K:此映射所维护的键的类型  V:映射值的类型(注意)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。数据结构为哈希表,可以使用null值和null键
  (3)Map集合的功能
  a:清空集合中所有的元素   map.clear();
  b: 删除某一个键值对  map.remove(1);
  c:判断功能
    boolean containsKey(Object key):判断集合是否包含指定的键
    boolean containsValue(Object value):判断集合是否包含指定的值
    boolean isEmpty():判断集合是否为空

二:HashMap

   (1)概述:基于哈希表的 Map 接口的实现。
    此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序, 特别是它不保证该顺序恒久不变。注意(如果两次的键相同,那么相对应的值就会被覆盖切返回值为被覆盖的值)

举例:

public class Demo {
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();
        String put = hashMap.put("梁山伯", "祝英台");
        System.out.println(put);
        hashMap.put("罗密欧","朱丽叶");
        hashMap.put("周瑜","小乔");
        String put1 = hashMap.put("梁山伯", "朱丽叶");
        System.out.println(put1);
        System.out.println(hashMap);
    }
}

结果:这里写图片描述
遍历Map集合的两种方式
(1)键找值:
举例:

public class Demo1 {
    public static void main(String[] args) {
        HashMap<String, Student> map = new HashMap<>();
        map.put("a11",new Student("张三",15));
        map.put("b11",new Student("赵四",13));
        map.put("c11",new Student("张二",19));
        map.put("z11",new Student("刘能",20));
        map.put("b10",new Student("张三",15));
        //遍历 键找值
        Set<String> set = map.keySet();
        for(String stu:set){
            System.out.println(stu+"=="+map.get(stu).getName()+"=="+map.get(stu).getAge());

        }

    }
}

学生类:

public class Student {
    private  String name;
    private int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }

    public String getName() {

        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public Student(String name, int age) {

        this.name = name;
        this.age = age;
    }

    public Student() {

    }
}

结果:这里写图片描述
(2) Entry 键值对 对象
举例:

public class Demo1 {
    public static void main(String[] args) {
        HashMap<String, Student> map = new HashMap<>();
        map.put("a11",new Student("张三",15));
        map.put("b11",new Student("赵四",13));
        map.put("c11",new Student("张二",19));
        map.put("z11",new Student("刘能",20));
        map.put("b10",new Student("张三",15));
        // Entry 键值对 对象
        Set<Map.Entry<String, Student>> entries = map.entrySet();
        for (Map.Entry<String, Student> stu:entries){
            String key = stu.getKey();
            Student value = stu.getValue();
            System.out.println(key+"=="+value.getName()+"=="+value.getAge());
        }

    }
}

学生类:

public class Student {
    private  String name;
    private int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }

    public String getName() {

        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public Student(String name, int age) {

        this.name = name;
        this.age = age;
    }

    public Student() {

    }
}

结果:这里写图片描述
三:LinkedHashMap

  概述:实现类的数据结构为哈希表和链表,可以预知迭代顺序,特点是元素唯一而且元素有序,唯一性靠哈希表保证,有序性靠链表来保证。

举例:

public class LinkedHash {
    public static void main(String[] args) {
        LinkedHashMap<Integer,String> map = new LinkedHashMap<>();
        map.put(10,"高圆圆");
        map.put(6,"范冰冰");
        map.put(2,"李冰冰");
        map.put(10,"范冰冰");
        Set<Integer> set = map.keySet();
        for(Integer s:set){
            System.out.println(s+"=="+map.get(s));
        }

    }
}

结果:这里写图片描述
三:TreeMap

 (1)概述:  键的数据结构是红黑树,可保证键的排序和唯一性  
            排序分为自然排序和比较器排序 
            线程是不安全的效率比较高
 (2)举例:
   集合嵌套之HashMap嵌套HashMap


            基础班
                张三      20
                李四      22
            就业班
                王五      21
                赵六      23
public class Demo {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> jichu = new LinkedHashMap<>();
        jichu.put("张三",20);
        jichu.put("李四",22);
        LinkedHashMap<String, Integer> jiuye = new LinkedHashMap<>();
        jiuye.put("王五",21);
        jiuye.put("赵六",23);
        LinkedHashMap<String, LinkedHashMap<String,Integer>> map = new LinkedHashMap<>();
        map.put("基础",jichu);
        map.put("就业",jiuye);
        Set<String> strings = map.keySet();
        for(String string:strings){
            System.out.println(string);
            LinkedHashMap<String, Integer> s = map.get(string);
            Set<String> strings1 = s.keySet();
            for(String s1:strings1){
                System.out.println("\t"+s1+"  "+s.get(s1));
            }
            System.out.println();
        }
    }
}

这里写图片描述结果:

猜你喜欢

转载自blog.csdn.net/weixin_40843624/article/details/81416771