首页 > 其他分享 >集合之Map【HashMap】

集合之Map【HashMap】

时间:2022-12-12 10:44:06浏览次数:38  
标签:Map HashMap map int age Student 集合 public name

package com.Lucky.Map;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;


/*
     HashMap:  1.底层结构是哈希表
               2.依赖hashCode以及equals方法保证键的唯一
               3.如果键储存的是“自定义对象”,就要重写hashCode方法以及equals方法
               4.如果值储存的是:自定义对象,就不用重写上面两个方法

 */
public class HashMap {
    public static void main(String[] args) {
        Map<Student,String> map=new java.util.HashMap<>();

        Student str1=new Student("唯一",22);
        Student str2=new Student("唯二",20);
        Student str3=new Student("唯三",22);
        Student str4=new Student("唯三",22);

        map.put(str1,"汉族");
        map.put(str2,"壮族");
        map.put(str3,"黎族");
        map.put(str4,"黎族");   //添加失败

      //  System.out.println(map);

        //
//        map.forEach(new BiConsumer<Student, String>() {
//            @Override
//            public void accept(Student student, String s) {
//                System.out.println(student);
//                System.out.println(s);
//            }
//        });

        map.forEach((stu,res)-> System.out.println(stu+":"+res));


        System.out.println("-----------------增强for循环-------------------");
        Set<Map.Entry<Student, String>> entries = map.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            System.out.println(entry.getKey()+":"+entry.getValue());
        }

        System.out.println("-----------------迭代器-------------------");
        Iterator<Map.Entry<Student, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

}

  材料:

package com.Lucky.Map;

import java.util.Objects;

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

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = 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;
    }

    @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);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        //比较年龄
       int res=this.getAge()-o.getAge();
       if(res==0){
           //年龄相等,就比较姓名
           res =  this.getName().compareTo(o.getName());
       }
       return  res;
    }
}

  综合小练习:

package com.Lucky.Map;

import java.util.*;
import java.util.HashMap;

/**
 * 案例:  组织80人去春游,有ABCD四个景点可以投票,统计出最多人想去的地方

 */
public class HashMapDemo1 {
    public static void main(String[] args) {
        //创建景点
        String[] arr={"A","B","C","D"};
        //创建ArrayList集合统计统计结果
        ArrayList<String> list=new ArrayList<>();

        //创建随机选择的地方
        Random random=new Random();
        for (int i = 0; i < 80; i++) {
            int index = random.nextInt(arr.length); //获取随机索引
            list.add(arr[index]);  //将随机索引的值添加到list集合中
        }


        //定义一个HashMap集合
        Map<String,Integer> map=new HashMap<>();
        
        //遍历list集合
        for (String jd : list) {
            //判断Map集合中是否存在该景点
            if(map.containsKey(jd)){
                //存在
                //获取该景点的选择次数
               int re=map.get(jd);
               //景点选择数量+1
                re++;
                //添加到集合中
                map.put(jd,re);

            }else {
                //不存在
                map.put(jd,1);

            }

        }
        System.out.println(map);

        //求最多人选择的景点
        int MAX=0;
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            int count=entry.getValue();
            if(count>MAX){
                MAX=count;
            }
        }
        for (Map.Entry<String, Integer> entry : entries) {
            int count=entry.getValue();
            if(count==MAX){
                System.out.println("投票人数最多景点:"+entry.getKey());
            }
        }

    }
}

  

标签:Map,HashMap,map,int,age,Student,集合,public,name
From: https://www.cnblogs.com/Lucky-only/p/16975455.html

相关文章

  • 集合之不可变集合
    不可变List集合:packagecom.Lucky;//System.out.println("------------拓展:创建不可变的list集合---------------");importjava.util.Iterator;importjava.util.Li......
  • 集合之综合小练习
    packagecom.Lucky.test;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Random;/*自动点名器要求:班级里面存在N名学生,实......
  • 集合之Set【TreeSet】
    packagecom.Lucky;importjava.util.Iterator;importjava.util.TreeSet;/***TreeSet:底层采用红黑树结构*可排序【默认从小到大】/无重复/无索......
  • 集合之Set【HashSet】
    packagecom.Lucky;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;importjava.util.function.Consumer;/***Set集合:无序/不可......
  • 集合之泛型【Genericcs】
    packagecom.Lucky;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Iterator;/***泛型的应用场景:*1。如果我们在定义类/......
  • 集合之Collections工具类
    packagecom.Lucky;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;/*Collections:java。util.Collections解......
  • 集合接口【Collection】之ArrayList
    packagecom.Lucky;importjava.awt.*;importjava.util.LinkedList;importjava.util.List;/*ArrayList:1.底层使用顺序存储结构,可以使用角......
  • 集合
    1packagecom.Lucky;23importjava.util.ArrayList;4importjava.util.Iterator;56/**7*集合:Collection[接口]与Map[接口]8*9*......
  • Map接口
    Map接口/*一、Map实现类的结构:  |----Map:双列数据:存储key-value的数据---类似于高中的函数:y=f(x)    |----HashMap:作为Map的主要实现类;线程不安全......
  • 你不知道的Map家族中的那些冷门容器
    概述本篇文章主要讲解下Map家族中3个相对冷门的容器,分别是WeakHashMap、EnumMap、IdentityHashMap,想必大家在平时的工作中也很少用到,或者压根不知道他们的特性以及适用......