思路:
把每个词都按字母进行排序,放进map中,看结果是否相同。所以map中存的是字符串,有该字符串顺序的词(是一个list,每次遇到有一样顺序的词都加到list后面)
输出之前还要讲每个列表按照内部的词排序一下。(用collections.sort())
思路即:单词按字母排序。列表按单词排序。
知识点:
字符串排序?将其先转成char数组,对数组排序再转回字符串
转char数组?char[] carr = str.toCharArray();
循环Collection(List, Set)的元素: String str:strs
String str = new String(carr)与String str = carr的区别:
前者是不关内存里是否有carr这个对象,都新建一个对象保存carr,是在堆里面建立的对象 string,str和carr,是生成两个对象
后者是查找栈里有没有carr,如果有就引用它,没有就把carr存进栈,是生成一个对象
比如
String s1 = "hello";
String s2 = "hello";
那么
System.out.println(s1==s2);
结果为true,因为他们的地址值是一致的,都指向常量池中的字符串常量。
而
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);
结果则是false,因为他们都在堆中建立了对象,而对象之间的地址值不同
遍历map的方法:map.keyset(), map.entryset()
entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value.
时间复杂度:O(nlength)