文章目录
字符串String
char[] -> String
char[] c;
String key = new String(c);
String -> char[]
String str = "sss";
char[] c = str.toCharArray();
数组
数组初始化
List<T> temp = new ArrayList<T>();
数组排序
char[] c;
Arrays.sort(c);
//int 同上
字典(哈希)
containsKey
map.containsKey(key); //bool
put and get
map.get(key);
map.put(key,temp);
map -> List
// map {'key1':'value1','key2':'value2'}
List<T> t = new ArrayList<T>(map.values()); // ['value','value2']
Stream
groupingby 分类
List<T> list; //实体类T的list
list.stream().collect(Collectors.groupingBy(T::getA))
,返回的是一个Map<String,List<T>>
,key为分组的值,value为list,包含组内的元素。
根据不同条件分组:
list.Stream().collect(Collectors.groupingBy(item -> {
if(item.getA < 3) return "3";
else return "other";
}));
//结果
//{"3":[T1,T2],"other":[T3,T4]}
例题
给你一个字符串数组,请你将 字母异位词
组合在一起。可以按任意顺序返回结果列表。
字母异位词
是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
return new ArrayList<>(Arrays.stream(strs)
.collect(Collectors.groupingBy(str -> {
// 返回 str 排序后的结果。
// 按排序后的结果来grouping by,算子类似于 sql 里的 group by。
char[] array = str.toCharArray();
Arrays.sort(array);
return new String(array);
})).values());
}
}
注意 groupingBy 算子计算完以后,返回的是一个 Map<String, List>,map 的键是每种排序后的字符串,值是聚合的原始字符串,我们只关心值,所以我们最后 new ArrayList<>(map.values())。
Set
不重复的集合
Set初始化
//用于去重
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
}
contain
num_set.contains(num); //boolean
两数操作
交换
swap(a,b)
返回最大最小
Math.min(a,b)
Math.max(a,b)