public static void main(String[] args) {
String[] str = {"ate","att","test","ttes","tae"};
List<List<String>> group = group(str);
System.out.println(group);
}
public static List<List<String>> group(String[] str){
//key用于存储排序后的数据,由于排序后的一个数据对应排序前的多个,value值存储排序前的数据,所以多个数据应该用List来存储
HashMap<String, List<String>> map = new HashMap<>();
for (String s : str) {
//将数组遍历,然后将数组中的元素转换成字节,因为我们要根据字母来进行排序
byte[] bytes = s.getBytes();
Arrays.sort(bytes);
//将字节再次转化成字符串
String s1 = new String(bytes); //这个就是已经排序好的字符串
if (!map.containsKey(s1)){
//给所有的value值全部new了一个ArrayList<String>数组
map.put(s1,new ArrayList<String>()); //将排序后的词放入key的位置
}
//这句话与if已经没有关系了,这句话就算没有if也能一直执行,它的else语句没有写的话默认是这个
//在同一次循环中,s1和s肯定是对应的同一个数据,因为他们一个是排序前的一个是排序后的
map.get(s1).add(s);//将key值对应的value值,放进去排序之前的词,如果key值重复,value值可以同时存多个
}
return new ArrayList<>(map.values()); //map中的value值也是一个ArrayList集合
}
4. 实现字符串分组 [“ate”,”att”,”test”,”ttes”,”tae”] 分组结果是 [[“ate”,”tae”],[“test”,”ttes],[“att”]]
最新推荐文章于 2024-10-08 15:07:49 发布