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. EXPORT_SYMBOL的使用

    转自:http://blog.csdn.net/cailiwei712/article/details/7998525 在查看内核驱动代码的时候会经常看到在一些函数后面总会跟EXPORT_SYMBOL ...

  2. 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

    题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. ...

  3. UWP crop image control

    最近做项目,需求做一个剪切图片的东东.如下图 主要是在一个canvas上面.根据crop的大小画出半透明的效果 <Canvas x:Name="imageCanvas" Vi ...

  4. 解决Win8无法升级.NET Framework 3.5.1 提示错误0x800F0906

    搞了好久,发现了这篇文,很清晰,就引用了过来.http://www.xdowns.com/article/239/Article_3065.html 起因是windows8.1装oracle10g提示 ...

  5. CSS居中布局总结【转】

    居中布局 <div class="parent"> <div class="child">demo</div> </d ...

  6. .NET基础面试题整理

    1.什么是.NET?什么是CLI?什么是CLR?IL是什么?   (1).net用于代码编译和执行的集成托管环境,换句话,它管理应用程序运行的方方面面,包括首次运行的编译,为程序分配内存存储数据和指令 ...

  7. mysql event_scheduler运行一段时间后 自动关闭

    应该是你重启过电脑或重启过服务了.  SELECT * FROM mysql.event;SET GLOBAL event_scheduler = 1; -- 开启定时器 0:off 1:on SHO ...

  8. C++ 画星号图形——空心矩形(核心代码记录)

    int mi=(int)a; int mj=(int)b; ;i<mi;i++) { ;j<mj;j++) { ||i==mi-) cout<<"*"; | ...

  9. 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向

    数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...

  10. 改变spring-servlet.xml名字和默认位置

    如何我们在web.xml定义: <servlet> <servlet-name>spring</servlet-name> <servlet-class> ...