今天学习到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. C++ socket网络爬虫(1)

    C++写的socket网络爬虫,代码会在最后一次讲解中提供给大家,同时我也会在写的同时不断的对代码进行完善与修改 我首先向大家讲解如何将网页中的内容,文本,图片等下载到电脑中. 我会教大家如何将百度首 ...

  2. 安装virtualbox

    1.安装virtualbox https://www.virtualbox.org/ 2.安装centos6.6 3.配置网络 右键-->网络-->网卡2-->host-only c ...

  3. LInux查看网速带宽及各进程占用情况:nethogs

    安装: #Ubuntu: sudo apt-get install nethogs #CentOS: sudo yum install nethogs 使用: $ sudo nethogs

  4. D-Separation(D分离)-PRML-8.22-Graphical Model 五 18 by 小军

    D-Separation(D分离)-PRML-8.22-Graphical Model 五18by 小军   一.引言 在贝叶斯网络的学习过程中,经常会遇到(D-Separation)D-分离这个概念 ...

  5. Huge Mods UVA - 10692(指数循环节)

    题意: 输入正整数a1,a2,a3..an和模m,求a1^a2^...^an mod m 解析: #include <iostream> #include <cstdio> # ...

  6. R1 学习记录

    libevent框架学习特点: 1.可移植行,跨平台的 2.速度快,libevent会用各平台最快的非阻塞IO函数 3.扩展性 4.方便性构成: 1.evutil: 抽象出各平台network的函数 ...

  7. 【刷题】BZOJ 1565 [NOI2009]植物大战僵尸

    Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombies进攻. ...

  8. redis协议

    Redis的通讯协议可以说大集汇了……消息头标识,消息行还有就行里可能还有个数据块大小描述.首先Redis是以行来划分,每行以\r\n行结束.每一行都有一个消息头,消息头共分为5种分别如下: (+) ...

  9. js 判断js函数,变量是否存在

    //是否存在指定函数 function isExitsFunction(funcName) {//这里的代码需要用try一下,因为当判断的函数是未定义时 浏览器会报错 try { if (typeof ...

  10. CH暑假欢乐赛 SRM 07 天才麻将少女KPM(DP+treap)

    首先LIS有个$O(n^2)$的DP方法 $f(i,j)$表示前i个数,最后一个数<=j的LIS 如果$a_i!=0$则有 如果$a_i=0$则有 注意因为$f(i-1,j)\leq f(i-1 ...