java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)
import java.util.*;
public class Person implements Comparable<Person>//使Person的属性具有比较性
{
private String name;
private int age;
public Person(String name,int age)//初始化构造函数
{
this.name = name;
this.age = age;
}
public void set(String name,int age)//重新设置姓名和年龄
{
this.name = name;
this.age = age;
}
public String getName()//获取姓名
{
return name;
}
public int getAge()//获取年龄
{
return age;
}
public String toString()//将姓名和年龄以字符串的形式返回
{
return name+","+age;
}
//出现重名时,再找到另一个hash地址用来存储数据(底层自动调用)
public int hashCode()
{
return name.hashCode()+age*34;
}
//判断接受的类是不是Person类,不是就抛出异常(底层自动调用)
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
throw new ClassCastException("不是Person类");
Person p = (Person)obj;
return this.name.equals(p.name) && this.age==p.age;
}
public int compareTo(Person p)//(按照自己的要求去作比较)
{
int num=new Integer(this.age).compareTo(p.age);
return num==0?this.name.compareTo(p.name):num;
}
}
public class Test
{
public static <T>void sop(T t) //使用泛型接收参数
{
System.out.println(t);
}
public static void main(String args[]) throws Exception
{
//创建一个map集合,用来存储数据 <>表示接收的是泛型,即指定的类型
TreeMap<Person,String> map = new TreeMap<Person,String>(/*new Mycompare()*/); //也可以使用这个被注释掉的自定义的比较器
//往集合添加数据
map.put(new Person("czhangsan1",11),"beijing");
map.put(new Person("zhangsan5",15),"nanjing");
map.put(new Person("azhangsan5",10),"shanghai");
map.put(new Person("zhangsan2",20),"haierbing");
map.put(new Person("bzhangsan2",20),"beijing");
map.put(new Person("zhangsan3",12),"shanghai");
map.put(new Person("zhangsan4",19),"changchun");
map.put(new Person("zhangsan4",10),"changchun");
map.put(new Person("zhangsan4",10),"zhengzhou");
//将map集合转换为set集合,因为map集合没有迭代器 ,而set集合有
Set<Map.Entry<Person,String>> entryset = map.entrySet();
//获取迭代器
Iterator<Map.Entry<Person,String>> it = entryset.iterator();
//用迭代器取数据
while(it.hasNext())
{
Map.Entry<Person,String> m = it.next();
Person key = m.getKey();//取出键
String value =m.getValue();//取出值
sop(key+"......."+"adress:"+value);//打印键和值
}
}
}
class Mycompare implements comparator<Perosn>//自定义一个比较器
{
public int compare(Person p1,Person p2)
{
int num = p1.getName().compareTo(p2.getName());
return num==0?new Integer(p1.getAge()).compareTo(new Integer(p2.getAge())):num;
}
}
//注意:上面的两种形式都实现了比较,任选其中一种就可以。要么实现comparable接口;要么在集合中传入自定义的比较器。
java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)的更多相关文章
- Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...
- 【Java必修课】通过Value获取Map中的键值Key的四种方法
1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...
- Java分享笔记:使用entrySet方法获取Map集合中的元素
/*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这 ...
- Java分享笔记:使用keySet方法获取Map集合中的元素
/*--------------------------- Map集合中利用keySet方法获取所有的元素值: ....keySet方法:将Map中的所有key值存入到Set集合中, ....利用Se ...
- LeetCode 677. Map Sum Pairs 键值映射(C++/Java)
题目: Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a ...
- JAVA Comparator 接口排序用法
java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comp ...
- Java程序斗地主发牌代码,List、Map集合的应用
Java集合存储的灵活运用List集合存储 54个编号 Map <key,value> key 对应的是编号 , value 是 牌的花色(红方梅黑)+ 具体的一张牌 ,比如 黑桃2 用2 ...
- Java——删除Map集合中key-value值
通过迭代器删除Map集合中的key-value值 Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext() ...
- java学习笔记—集合之Map集合
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...
随机推荐
- error-unable-to-access-the-iis-metabase或者无法加载VS项目中的网站
参考:http://stackoverflow.com/questions/12859891/error-unable-to-access-the-iis-metabase 1.确定IIS是否安装完整 ...
- 收藏的几个经典Flash
本人收藏了几个有意思的Flash,在此与大家分享下 1.黄金矿工中文版.swf 2.中国象棋.swf 3.运动的老鼠.swf 4.时钟.swf 5. 2048.swf 6.小猫逃跑.swf
- HDU 5769 Substring 后缀数组
Substring Problem Description ?? is practicing his program skill, and now he is given a string, he h ...
- HDU 4605 Magic Ball Game (dfs+离线树状数组)
题意:给你一颗有根树,它的孩子要么只有两个,要么没有,且每个点都有一个权值w. 接着给你一个权值为x的球,它从更节点开始向下掉,有三种情况 x=w[now]:停在此点 x<w[now]:当有孩子 ...
- MySQL - 问题集 - "Waiting for table metadata lock"(待完善)
待完善.show processlist; 可参考1:http://blog.csdn.net/huochuangchuang/article/details/49423893 可参考2:http:/ ...
- 纯CSS实现二级下拉导航菜单
这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: < ...
- Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- Session和Cache的区别
以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application.其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息.Session则保存 ...
- js直接打印pdf文件内容
(1)需求:是网页上打开一个pdf文件,然后直接打开打印机,就是直接打印,不用用户再次点击打印按钮,这样用户体验好 (2)经历: 我在网上找了资料就是使用window.print(),但是这个只是打印 ...
- style
设计的默认单位为px; 为了简化设计,都是以750px为基本单位设计的,如果屏幕大小不同,它会根据屏幕大小自动缩放. 它的样式选择和CSS非常类似,但是和CSS选择器不同的是,它只支持单级选择,不支持 ...