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集合的键值对进行顺序输出)的更多相关文章

  1. Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...

  2. 【Java必修课】通过Value获取Map中的键值Key的四种方法

    1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...

  3. Java分享笔记:使用entrySet方法获取Map集合中的元素

    /*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这 ...

  4. Java分享笔记:使用keySet方法获取Map集合中的元素

    /*--------------------------- Map集合中利用keySet方法获取所有的元素值: ....keySet方法:将Map中的所有key值存入到Set集合中, ....利用Se ...

  5. 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 ...

  6. JAVA Comparator 接口排序用法

    java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comp ...

  7. Java程序斗地主发牌代码,List、Map集合的应用

    Java集合存储的灵活运用List集合存储 54个编号 Map <key,value> key 对应的是编号 , value 是 牌的花色(红方梅黑)+ 具体的一张牌 ,比如 黑桃2 用2 ...

  8. Java——删除Map集合中key-value值

    通过迭代器删除Map集合中的key-value值 Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext() ...

  9. 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 ...

随机推荐

  1. eworkflow工作流系统在iis中发布

    eworkflow工作流系统在iis中发布 win7下面的iis发布eworkflow工作流系统,要带虚拟目录的,如发布成http://localhost/eworkflow/login.aspx这样 ...

  2. Spring mvc-异常javax.servlet.ServletException: Could not resolve view with name &#39;xxx&#39; in servlet with name &#39;spring&#39;

    最近使用spring mvc开发项目,遇到一个问题: javax.servlet.ServletException: Could not resolve view with name 'ok' in ...

  3. 文件输入流 FileInputStream类 文件输出流FileOutputStream ---转载

    转载自---http://blog.csdn.net/hguisu/article/details/7418161 111:文件输入流: FileInputStream可以使用read()方法一次读入 ...

  4. php学习笔记(3)

    1.计数器 <?php /* simple access counter for php3 (c)1998 David W. Bettis dbettis@eyeintegrated.com m ...

  5. Swift - 使用MapKit显示地图,并在地图上做标记

    通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记. 1,通过mapType属性,可以设置地图的显示类型 MKMapType.Standard :标准地 ...

  6. Linq 动态组合排序(Lambda)

    最近有个项目需要做一个排班的功能,需要对排班的数据按不同的规则进行排序:因为排序规则是动态变化的,所以不太适合放到数据库中(临时表)中处理: 所以考虑使用Linq的排序方式(按不同的条件判断条件组合排 ...

  7. HTML学习笔记08-表格

    HTML表格 表格由<table>标签来定义,表格的行由<tr>标签来定义,表格的列由<td>标签来定义 <!DOCTYPE html> <htm ...

  8. 使用hibernate与mysql时数据不能插入的原因及解决办法

    1.背景 之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照<Myeclipse Hibernate 快速入门 中文版>(CSDN,百度文库 ...

  9. 安装SQLserver2008r2出现 试图执行未经授权的操作

    安装时取消对兼容模式的勾选,重新安装就可以了. 或者加上   以管理员身份运行,兼容性设置,以管理员身份运行

  10. loj10009 P1717 钓鱼

    P1717 钓鱼 贪心+优先队列 先枚举最后走到哪个湖,然后用优先队列跑一遍贪心即可 #include<iostream> #include<cstdio> #include& ...