1、Map集合实例化
步骤:
- 导包,java.util.Map包
- 通过HashMap创建对象
- 语法格式:
Map<引用数据类型,引用数据类型> map = new HashMap<>();
HashMap类的特点:
- HashMap是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
- HashMap无序,即不会记录插入的顺序
2、常用方法
- put(K key, V value)将键(key)/值(value)映射存放到mao集合中
- get(Object key)返回指定键所映射的值,没有该key对应的值则返回null,即获取key对应的valu
- size()返回Map集合中数据数量,准确说是返回key-value的组数
- entrySet()将map集合每个key-value转换为一个Entry对象并返回由所有的Entry对象组成的Set集合
- getOrDefault(K key,Object value)方法获取指定key对应对value,如果找不到key,则返回设置的默认值。
import java.util.HashMap;
import java.util.Map;
public static void main(String[] args) {
Map<Integer,Integer> map = new HashMap<>();
map.put(2,5);
map.put(1,2);
// 通过netrySet方法把map转换为一个数组
// 通过增强For循环遍历map
for (Map.Entry<Integer,Integer> entry :map.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
例题
输入一个数字n(m<=1e5),然后输入一个长度为n的数组an(-1e9<=ai<=1e9),请你输出此出现频率最大的数,如果有多个频率最大,按从小到大依次输出。
示例:5 1 1 2 2 0 9 0 0 -1 -1 2 2 5 5 7
1 2 -1 0 2 5
import java.util.*;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
int a = sc.nextInt();
// map存储每个数的出现次数
map.put(a,map.getOrDefault(a,0)+1);
}
int max = 0;
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
max = Math.max(max,entry.getValue());
}
List<Integer> list = new ArrayList<>();
for (Map.Entry<Integer,Integer> entry:map.entrySet()){
if(entry.getValue()==max){
list.add(entry.getKey());
}
}
Collections.sort(list);
for (int x:list){
System.out.print(x+" ");
}
}