1、通过观察Collections.sort()源码,如下:
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}
发现:(1)第一个参数必须是list类型,所以如果是HashMap是没有办法实现排序的,这也很容易理解,因为HashMap是按照key去存储数据的,每个key的value都有自己特定的bucket,而list是数组存储或者链表存储的,所以可以按照元素的value值进行排序。那么为了实现对HashMap中对value进行排序,那么就要做一个转换:
1.1、将HashMap转为一个list的表达式
1.2、再对新生成的list表达式调用Collections.sort()方法就可以啦。
2、这个问题是在牛客网刷题遇到的,所以把题目也顺道记录下来吧。
2.1、题目描述
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径