class Solution {
// 方法 groupAnagrams:需要传入一个string数组 作为参数,且返回值为list集合 list套list string;
public List<List<String>> groupAnagrams(String[] strs) {
// 创建一个map集合 key是string类型 ,value是list<string>
Map<String, List<String>> map = new HashMap<String, List<String>>();
// 使用增强for循环foreach 循环传入的参数 string数组strs
for (String str : strs) {
// 得到每个字符串str ,通过字符串的方法toCharArray() 返回一个char数组array
char[] array = str.toCharArray();
// 使用Arrays类(用来操作数组的工具类) 中的sort方法进行排序(默认从小到大 char本质对应Ascll码表有对应十进制等)
Arrays.sort(array);
// 通过stirng类的构造方法生成新的字符串
String key = new String(array);
// Map.getOrDefault(Object key, V defaultValue)方法的作用是:当Map集合中有这个key时,就使用这个key值;如果没有就使用默认值defaultValue。 (把新生成的字符串作为map的key 得到list集合(如果key存在就根据key取出之前的key对应的list集合))
List<String> list = map.getOrDefault(key, new ArrayList<String>());
// 把当前字符串添加到获取出来的list集合中
list.add(str);
// 添加到map
map.put(key, list);
}
// 返回map中所有的value得到新的list集合
return new ArrayList<List<String>>(map.values());
}
}
foreach与for循环不同点就在于:
for和foreach使用的对象大多是数组,如果对象是可以随机访问的用for,效率更高,如果访问对象是顺序的用foreach,同时注意foreach用作访问,不进行数组或者列表的操作
普通for循环在遍历集合时使用下标来定位集合中的元素,java在jdk1.5中开始支持foreach循环,foreach在一定程度上简化了对集合的遍历,但是foreach不能完全代替for循环
for循环可以有索引 根据得到当前下标, foreach是没有索引的