集合练习题
1. 已知一个HashMap<Integer,User>集合, Person有name(String)和 age(int)属性。
请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Integer,Person>为形参,
返回类型为 HashMap<Integer,Person>,要求对HashMap中的Person的age倒序进行排序。
排序时key=value键值对不得拆散
思路
: 先把Map转成Set,再把Set转成List,利用工具类把List排序,最后使用LinkedHashMap作为结果集
public static void main(String[] args) throws Exception {
HashMap<Integer, Person> persons = new HashMap<>();
persons.put(1,new Person(12,"孙悟空"));
persons.put(2,new Person(14,"猪八戒"));
persons.put(3,new Person(13,"唐僧"));
for (Map.Entry entry : persons.entrySet()){
System.out.println(entry.getKey()+" , "+entry.getValue());
}
HashMap<Integer, Person> integerPersonHashMap = sortMap(persons);
System.out.println("-------------------------------");
for (Map.Entry entry : integerPersonHashMap.entrySet()){
System.out.println(entry.getKey()+" , "+entry.getValue());
}
}
public static HashMap<Integer,Person> sortMap(HashMap<Integer,Person> map){
Set<Map.Entry<Integer, Person>> entries = map.entrySet();
//把Set转换成List
List<Map.Entry<Integer, Person>> list = new ArrayList<Map.Entry<Integer,Person>>(entries);
//对List进行排序
Collections.sort(list, new Comparator<Map.Entry<Integer, Person>>() {
@Override
public int compare(Map.Entry<Integer, Person> o1, Map.Entry<Integer, Person> o2) {
//倒序,后面减前面
return o2.getValue().getAge() - o1.getValue().getAge();
}
});
//HashMap的子类里面有序的就只有LinkedHashSet了
LinkedHashMap<Integer, Person> resultMap = new LinkedHashMap<>();
for (Map.Entry<Integer,Person> entry : list){
resultMap.put(entry.getKey(),entry.getValue());
}
return resultMap;
}
2. 用面向对象(Map)的方法求出数组中重复 value 的个数,按如下个数输出:
4 出现:5 次
5 出现:4 次
1 出现:3 次
2 出现:2 次
8 出现:2 次
6 出现:1 次
7 出现:1 次
public static void main(String[] args) throws Exception {
int[] arr = {1, 4, 1, 4, 2, 5, 4, 5, 8, 7, 8, 77, 88, 5, 4, 9, 6, 2, 4, 1, 5};
HashMap<Integer, Integer> map = new HashMap<>();
//把数据存入到Map中: key-数字 value-数字出现次数
for (int i = 0; i < arr.length; i++) {
Integer tmp = map.get(arr[i]);
int v = (tmp != null) ? (tmp.intValue() + 1) : 1;
map.put(arr[i],v);
}
//开始对Map进行排序
ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
//对List进行排序
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
//先按value升序,再按key升序
int tmp = o2.getValue() - o1.getValue();
return (tmp == 0) ? o1.getKey() - o2.getKey() : tmp;
}
});
for (Map.Entry<Integer,Integer> mapping : list){
System.out.println(mapping.getKey() + " 出现:" + mapping.getValue() + " 次");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202519.html