TreeSet按value排序
今天学习到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排序的更多相关文章
- HashSet非常的消耗空间,TreeSet因为有排序功能,因此资源消耗非常的高,我们应该尽量少使用
注:HashMap底层也是用数组,HashSet底层实际上也是HashMap,HashSet类中有HashMap属性(我们如何在API中查属性).HashSet实际上为(key.null)类型的Has ...
- TreeSet类的排序
TreeSet支持两种排序方法:自然排序和定制排序.TreeSet默认采用自然排序. 1.自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系, ...
- 【Java】Treeset实现自定义排序
两个类,一个学生类,含姓名和出生日期两个属性:还有一个学生排序类,重写compare函数,自定义排序规则是先比较出生日期,如果相同再比较姓名字母 package birthday; import ja ...
- Java TreeSet的定制排序
注:只贴出实现类 package Test3; import java.util.Comparator;import java.util.TreeSet; public class Test { pu ...
- TreeSet的自然排序(自定义对象 compareTo方法)
>要实现自然排序,对象集合必须实现Comparable接口,并重写compareTo()方法 >一般需求中描述的是"主要条件",如:按姓名长度排序. 需注意次要条件 ...
- TreeSet之定制排序和自然排序
TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字 ...
- TreeSet与TreeMap排序
1.TreeSet原理: /* * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 * * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存 ...
- TreeSet 和TreeMap 排序
TreeSet 有两种排序方式 1. Java.lang.Comparble+compareTo new TreeSet() 用这种方法必须要求实体类实现Comparable接口,也就是说要求添加到T ...
- Java TreeSet集合 比较器排序Comparator的使用
比较器排序Comparator的使用 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 用TreeSet集合存 ...
随机推荐
- 减小Delphi 2010/delphi XE编译出来的文件大小
1.禁用RTTI 禁用的方法很简单,就是要在工程(dpr文件中.Delphi2010下项目文件是dproj文件,但dpr文件仍然是默认的编写代码的项目文件)的Uses语句前添加下面的定义就可以了: { ...
- js中的extend,可实现浅拷贝深拷贝
js中的extend 1. JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...
- 将utf-8的中文或者字符都看成一个字符
function utf8_strlen($string=null){ // 将字符串分解为单元 preg_match_all("/./us", $string, $match); ...
- Linux_Nginx 安装
官网:http://nginx.org/ 1.下载http://nginx.org/download/nginx-1.14.0.tar.gz 2.查看详情 [zwesy@localhost ~]$ l ...
- java 数据结构与算法---队列
原理来自百度百科 一.队列的定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插 ...
- logback错误日志发送邮件
logback 一.介绍 logback是由log4j的作者开发的一个开源日志组件,用以替代log4j. logback由3个部分组成: ♦ logback-core (基础模块) ♦ logback ...
- windows结束端口对应的进程
netstat -ano |findstr " //window查看端口占用 taskkill /pid 54828taskkill /F /pid 54828 //强制中止 转载请注明博客 ...
- Paxos Made Simple【翻译】
Paxos一致性算法——分布式系统中的经典算法,论文本身也有一段有趣的故事.一致性问题是分布式系统的根本问题之一,在论文中,作者一步步的加强最初一致性问题(2.1节提出的问题)的约束条件,最终导出了一 ...
- WEB入门 四 CSS样式表深入
学习内容 Ø CSS选择器深入学习 Ø CSS继承 Ø CSS文本效果 Ø CSS图片效果 能力目标 Ø 掌握CSS选择器的组合声 ...
- 解题:POI 2008 Station
题面 水水的换根裸题,不过以前还真没做过换根的题 换根的思想就是在DFS中利用树的信息更新出当前点为根时的信息,具体来说一般是考虑子树外和子树内两部分 每个点的答案$ans$就是$ans[fa]+n- ...