Java~Map的基本使用与Map的三种遍历方式、Set的基本使用

概念模型

一般把搜索的数据称为关键字(key),和关键字对应的称为值(value),所以就会出现俩种模型

  1. 纯key模型,即是我们的Set要解决的事情,只需判断关键字在不在集合即可,没有关联的value
  2. Key-Value模型,即我们的Map要解决的事情,需要指定Key找到关联的Value。

在介绍Map之前先先介绍–条目(Entry)

  • Map.Entry<K,V>即Map中定义的K类型的Key,和V类型的value的映射关系的类
  • 常见方法: getKey()返回key 和getValue()返回value
for (Map.Entry<String, Student> m : map.entrySet()
             ) {
            System.out.println(m.getKey() + ":" + m.getValue());
        }

下面Map使用此自定义类型:

class Student {
    public String name;
    public int agg;
    public String garde;
    public String schlool;

    static void h() {
        System.out.println("hh");
    }
    public Student(String name, int agg, String garde, String schlool) {
        this.name = name;
        this.agg = agg;
        this.garde = garde;
        this.schlool = schlool;
    }

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

Map的常用使用方法

  • Map的实例化
Map<String, Student> map = new HashMap<>();
  • 设置key对应的value(要注意key是不可重复的,如果重复,后面来的value会覆盖前面的value)
 Student student = new Student("Listen", 20, "001", "Happy");
        Student student1 = new Student("Listen", 30, "002", "Day");
        Student student2 = new Student("Byke", 40, "003", "Sun");
        Student student3 = new Student("Frake", 50, "004", "Mane");
        map.put(student.name, student);
        //如果有相同的key,新的value会覆盖旧的value
        map.put(student.name, student);
        map.put(student1.name, student1);
        map.put(student2.name, student2);
        map.put(student3.name, student3);
  • 返回key对于的value
String name = "Listen";
        Student ret =  map.get(name);
  • 回key对于的value,如果key不存在,返回默认值
map.getOrDefault("mm", new Student("mm", 50, "009", "shine"))
  • 删除key对应的映射关系
map.remove(name);
  • 返回所有key的不重复集合
Set<String> set = map.keySet();
  • 返回所有value的可重复集合
Collection<Student> collections = map.values();
  • 返回所有的key-value映射关系
Set<Map.Entry<String, Student>> set1 = map.entrySet();
  • 判断是否有可以 或者判断是否有value
boolean containsKey(Object key);
boolean containsValue(Object value);

  • Map的遍历方式
//遍历map
        for (Map.Entry<String, Student> m : map.entrySet()
             ) {
            System.out.println(m.getKey() + ":" + m.getValue());
        }
//用迭代器遍历map
        System.out.println("=============");
        Iterator<Map.Entry<String, Student>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Student> entry = iterator.next();
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        //返回所有map的映射关系,并将它变成set里的key
        Set<Map.Entry<String, Student>> set1 = map.entrySet();
        //然后遍历set

Map最常用的地方-统计

 Map<Integer, Integer> map = new TreeMap<>();
        for(int i : nums) {
            Integer tmp = map.get(i);
            if(tmp == null) {
                map.put(i,1);
            }else {
                map.put(i,tmp + 1);
            }

        }
        //第二种方法
         Map<Integer, Integer> map = new TreeMap<>();
        for(int i : nums) {
           map.put(i,map.getOrDefault(i,0) + 1);
            }

        }
        

Set的使用

  • 添加元素,但重复元素不会添加成功
 Set<String> set = new TreeSet<>();
        set.add("aaa");
        set.add("bbb");
        set.add("aaa");
        set.add("ccc");
        //有重复的set只保留一份
  • 判断0是否在集合中
boolean contains(Object o)
  • 删除集合中的0
boolean remove(Object o)
  • 返回迭代器
 Iterator<String> iterator = set.iterator();
  • 清空集合
void clear();

Set的遍历方式

//遍历方式 for each
        for (String str : set
             ) {
            System.out.print(str + " ");
        }
        System.out.println();
        //用迭代器进行遍历
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            System.out.print(str + " ");
        }

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/106056701