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 ...
随机推荐
- android系统中自带的一些ThemeStyle
1 android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" 布局页面最上面 不会显示 and ...
- pm2无法自动重启
在服务器上有个上传文件的服务,之前是pm2启动,每当有文件上传会自动重启 现在为了应对服务器宕机,我把启动脚本放在了另一文件夹内,所以就无法自动重启, 原文在 http://pm2.keymetric ...
- 【Java EE 学习 50】【Spring学习第二天】【使用注解的DI实现】【spring中的继承】【动态代理伪hibernate实现】
一.使用注解的DI实现 1.@Resource 使用该注解能够实现引用型属性的DI实现,该注解能够根据属性名和属性类型自动给属性赋值.一般使用@Resource(name="student& ...
- html标准
html1.使用双引号2. <img src=""> 不添加/3. <html lang="zh-CN">4. <a class= ...
- 【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题
首先 关于dom4j的API,有如下: 当然 其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: <project xmlns="ht ...
- TComboBox; 指定某一行,不给下拉,只读ReadOnly 伪装 实现
//cbb1: TComboBox; 指定某一行,不给下拉,自读伪装 实现: cbb1.Style :=csSimple; //设定style 不可以下拉 cbb1.ItemIndex := ; // ...
- Ado.Net事物处理
protected void Button2_Click(object sender, EventArgs e) { SqlConnection con = new SqlCo ...
- dedecms头部常用:标题,栏目描述,关键词
调用SEO标题:<title>{dede:field.title/}_{dede:field.seotitle /}-{dede:global.cfg_webname/}</titl ...
- Go语言练习:go语言与C语言的交互——cgo
1.代码 package main import "fmt" /* #include <stdlib.h> #include <stdio.h> void ...
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...