我总是在处理这个问题,也很想写着帮助我记忆一下。下面也就是我找到的资料,很有用
package com.qiyadeng.core;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class CountDuplicatedList {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("b");
list.add("c");
list.add("a");
list.add("a");
list.add("a");
System.out.println("\n例子1 - 计算'a'出现的次数");
System.out.println("a : " + Collections.frequency(list, "a"));
System.out.println("\n例子2 - 计算所有对象出现的次数");
Set uniqueSet = new HashSet(list);
for (String temp : uniqueSet) {
System.out.println(temp + ": " + Collections.frequency(list, temp));
}
System.out.println("\n例子3 -用Map来计算对象出现的次数");
Map map = new HashMap();
for (String temp : list) {
Integer count = map.get(temp);
map.put(temp, (count == null) ? 1 : count + 1);
}
printMap(map);
System.out.println("\nMap排序-以key排序");
Map treeMap = new TreeMap(map);
printMap(treeMap);
}
public static void printMap(Map map) {
for (Map.Entry entry : map.entrySet()) {
System.out.println("Key-value : " + entry.getKey() + "- "
+ entry.getValue());
}
}
}
输出结果
例子1 - 计算'a'出现的次数
a : 4
例子2 - 计算所有对象出现的次数
d: 1
b: 2
c: 2
a: 4
例子3 -用Map来计算对象出现的次数
Key-value : d- 1
Key-value : b- 2
Key-value : c- 2
Key-value : a- 4
Map排序-以key排序
Key-value : a- 4
Key-value : b- 2
Key-value : c- 2
Key-value : d- 1
其中,我要说一下,最后一个给map排序也是当时要解决的问题之一,但是,我尝试了很长时间都没有成功。还出现了一个很有意思的问题,
在迭代过程中, for (Map.Entry entry : entrySet) {一直在类型上报错。解决办法是在上面定义
entrySet的时候直接给他定义好Set的类型,就可以解决啦!!!后面如果解决了这个map排序的问题,我还会来补充上的。
final
Map
new
HashMap
map.put(
"语文课本"
,
11
);
map.put(
"英语课本"
,
9
);
map.put(
"数学课本"
,
20
);
map.put(
"政治课本"
,
12
);
map.put(
"化学课本"
,
12
);
System.out.println(map.toString());
//结果为{政治课本=12,英语课本=9,数学课本=20,语文课本=11,化学课本=12}
Map
new
TreeMap
new
Comparator
public
int
compare(String obj1,String obj2){
if
(map.get(obj1)!=map.get(obj2)){
return
map.get(obj2).compareTo(map.get(obj1));
}
else
{
return
map.get(obj1);
}
}
}
);
orderByValue.putAll(map);
System.out.println(orderByValue.toString());
//结果为{数学课本=20,政治课本=12,化学课本=12,语文课本=11,英语课本=9}
我说我还会回来的。。
参考:
https://zhidao.baidu.com/question/587631503.html
补充一点,按照treeMap的key进行排序,倒叙(从大到小)
TreeMap
/*
* int compare(Object o1, Object o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public int compare(String o1, String o2) {
//指定排序器按照降序排列
return Integer.parseInt(o2.toString()) - Integer.parseInt(o1.toString());
}
});
treeMap2.put("1", 1);
treeMap2.put("2", 2);
treeMap2.put("3", 3);
for(Object key : treeMap2.keySet()){
Map map1 = new HashMap();
if(key!=null&&!"".equals(key)){
Object value = treeMap2.get(key);
map1.put("Num", key);
map1.put("visitingDetail", value);
list1.add(map1);
}
}
排序结果是多少呢?你猜!