赞
踩
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
Map<Integer, Integer> map = new HashMap<>();
Set<Integer> set = new HashSet<>();
根据键的 HashCode 值存储数据,具有很快的访问速度
,最多允许一条记录的键为 null,不支持线程同步。map.getOrDefault(word, 0);
如果存在与word值相等的key值,直接返回对应的value值,否则返回0。
分析:我们知道java的数据类型分为基本数据类型和引用数据类型,而引用数据类型中包含类和接口。String类型属于类这一部分,而HashSet和HashMap也是类,所以,HashMap和HashSet是一种数据类型,在HashMap中嵌套HashSet与基本数据类型没什么区别。不用特殊对待。
Map<Integer, String> map = new HashMap<>();
Map<Integer, Set<Integer>> mapSet = new HashMap<>();
eg1: leetcode–1817. 查找用户活跃分钟数
1817. 查找用户活跃分钟数
我的思路:由于我最开始不知道HashMap和HashSet可以嵌套使用,所以我定义的HashMap<Integer, String>中使用key来存储对应的用户ID,用String的固定模式" " + 分钟时刻的模式来存储用户执行操作的分钟,如果字符串中不包含新来的" " + 分钟时刻,就加入字符串,否则说明已经有了该分钟时刻,就不加入字符串就可以了,但耗时和存储空间用的多。具体实现如下:
class Solution { public int[] findingUsersActiveMinutes(int[][] logs, int k) { int[] answer = new int[k]; HashMap<Integer, String> uAM = new HashMap<>(); for (int i = 0; i < logs.length; i++) { String str = " " + logs[i][1]; if (!uAM.containsKey(logs[i][0])) uAM.put(logs[i][0], str); else { if (!uAM.get(logs[i][0]).contains(str)) uAM.put(logs[i][0], uAM.get(logs[i][0]) + str); } } for (Integer key : uAM.keySet()) { String str = uAM.get(key); int times = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == ' ') times++; } answer[times - 1]++; } return answer; } }
HashMap中嵌套使用HashSet的代码实现如下:
class Solution { public int[] findingUsersActiveMinutes(int[][] logs, int k) { int[] answer = new int[k]; Map<Integer, Set<Integer>> map = new HashMap<>(); for(int i = 0; i < logs.length; i++){ Set<Integer> set = new HashSet<>(); if (map.get(logs[i][0]) != null) set = map.get(logs[i][0]); set.add(logs[i][1]); map.put(logs[i][0], set); } for (Set<Integer> value : map.values()) answer[value.size() - 1]++; return answer; } }
说明:
Map<Integer, String> map = new HashMap<>();
for (Integer key : map.keySet()) {
//...
}
Map<Integer, String> map = new HashMap<>();
for (String value : map.values()) {
//...
}
Map<Integer, String> map = new HashMap<>();
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//...
entry.getKey();
entry.getValue();
}
由于List属于接口,所以和基本数据类型一样也能被嵌套使用。
import java.util.ArrayList; import java.util.List; public class test { public static void main(String[] args) { List<List<Integer>> a = new ArrayList<>(); List<Integer> b=new ArrayList<>(); b.add(1); b.add(2); b.add(3); System.out.println(b); List<Integer> c= new ArrayList<>(); c.add(4); c.add(5); c.add(6); System.out.println(c); a.add(b); a.add(c); System.out.println(a); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。