今天学习到TreeSet,但是它是按照key的值来排序的,那如果我们想要按照value的值排序呢?这个问题我上网看了好久,终于找到一个比较易懂的例子:

例:(统计输入数字的个数)

话不多说,看代码就懂

import java.util.*;
import java.util.Scanner; public class CountNum {
public static void main(String[] args){ HashMap<Integer, Integer> hashMap = new HashMap<Integer,Integer>();
Scanner input = new Scanner(System.in);
int num = input.nextInt();
while (num != 0)
{
if(hashMap.get(num) == null)
{
hashMap.put(num,1);
}
else
{
int value = hashMap.get(num).intValue();
value++;
hashMap.put(num,value);
}
num = input.nextInt();
} // Create a tree map from the hash map
TreeMap<Integer, Integer> treeMap =
new TreeMap<Integer, Integer>(hashMap); Set<Map.Entry<Integer,Integer>> entrySet = treeMap.entrySet(); ArrayList<Count> list = new ArrayList<Count>();
for(Map.Entry<Integer,Integer> entry:entrySet){
Count cc = new Count(entry.getKey(),entry.getValue());
list.add(cc);
}
Collections.sort(list);
/*
for(int i = 0; i< list.size();i++){
System.out.println(list.get(i).getKey() + "\t" + list.get(i).getValue());
}
*/ //找出多个最大值
int i = 0;
for(; i< list.size()-1;i++){
if(list.get(i).getValue() > list.get(i+1).getValue())
{
System.out.println(list.get(i).getKey() + "\t" + list.get(i).getValue());
break;
}
else if(list.get(i).getValue() == list.get(i+1).getValue() && i+1 < list.size())
{
System.out.println(list.get(i).getKey() + "\t" + list.get(i).getValue()); }
}
if(i == list.size() -1 )
System.out.println(list.get(i).getKey() + "\t" + list.get(i).getValue()); }
} class Count implements Comparable {
int key;
int value; public int getKey(){
return key;
}
public int getValue(){
return value;
}
public Count(int key, int value) {
this.key = key;
this.value = value;
} public int compareTo(Object o) {
return -(value - ((Count)o).value);
} public boolean equals(Object o) {
return value == ((Count)o).value;
}
}

TreeSet按value排序的更多相关文章

  1. HashSet非常的消耗空间,TreeSet因为有排序功能,因此资源消耗非常的高,我们应该尽量少使用

    注:HashMap底层也是用数组,HashSet底层实际上也是HashMap,HashSet类中有HashMap属性(我们如何在API中查属性).HashSet实际上为(key.null)类型的Has ...

  2. TreeSet类的排序

    TreeSet支持两种排序方法:自然排序和定制排序.TreeSet默认采用自然排序. 1.自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系, ...

  3. 【Java】Treeset实现自定义排序

    两个类,一个学生类,含姓名和出生日期两个属性:还有一个学生排序类,重写compare函数,自定义排序规则是先比较出生日期,如果相同再比较姓名字母 package birthday; import ja ...

  4. Java TreeSet的定制排序

    注:只贴出实现类 package Test3; import java.util.Comparator;import java.util.TreeSet; public class Test { pu ...

  5. TreeSet的自然排序(自定义对象 compareTo方法)

    >要实现自然排序,对象集合必须实现Comparable接口,并重写compareTo()方法 >一般需求中描述的是"主要条件",如:按姓名长度排序.  需注意次要条件 ...

  6. TreeSet之定制排序和自然排序

    TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字 ...

  7. TreeSet与TreeMap排序

    1.TreeSet原理: /* * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 *  * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存 ...

  8. TreeSet 和TreeMap 排序

    TreeSet 有两种排序方式 1. Java.lang.Comparble+compareTo new TreeSet() 用这种方法必须要求实体类实现Comparable接口,也就是说要求添加到T ...

  9. Java TreeSet集合 比较器排序Comparator的使用

    比较器排序Comparator的使用 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 用TreeSet集合存 ...

随机推荐

  1. 蜗牛慢慢爬 LeetCode 36.Valid Sudoku [Difficulty: Medium]

    题目 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  2. js对数组进行浅复制,深复制的方法

    js 数组常用方法,数组的拷贝(不影响原数组),数组相等 置顶2017年07月17日 17:39:26 阅读数:4640 改变原数组的方法: pop();删除尾部的第一个元素并且返回这个元素: var ...

  3. git使用教程推荐

    Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ...

  4. xpath 去除空格

    normalize,字面意思就是正规化 加入space  大概意思就是空格的处理了 官方解释是这样的: 通过去掉前导和尾随空白并使用单个空格替换一系列空白字符,使空白标准化.如果省略了该参数,上下文节 ...

  5. Rotate Array II

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  6. 初次使用http打不开页面,使用https打开过后使用http协议又能正常访问

    http协议为什么打不开https站点 在访问一个https的站点,比如 https://www.aaa.com,首次访问时,访问的地址是 http://www.aaa.com,(不加S),出现的是网 ...

  7. 【刷题】BZOJ 3144 [Hnoi2013]切糕

    Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x, ...

  8. [洛谷P4723]【模板】线性递推

    题目大意:求一个满足$k$阶齐次线性递推数列$a_i$的第$n$项. 即:$a_n=\sum\limits_{i=1}^{k}f_i \times a_{n-i}$ 题解:线性齐次递推,先见洛谷题解, ...

  9. 【bzoj2034】 2009国家集训队—最大收益

    http://www.lydsy.com/JudgeOnline/problem.php?id=2034 (题目链接) 题意 n个任务,每个任务只需要一个时刻就可以完成,完成后获得${W_i}$的收益 ...

  10. wazhu之agent manage

      代理生命周期 注册代理 一旦代理程序安装在要监控的计算机上,就必须向Wazuh管理器注册才能建立通信.这可以通过命令行,Authd或RESTful API完成. 注册代理将保留在管理器中,直到用户 ...