笔试题之Comparable

逆熵泛型
• 阅读 158

我们知道HashMap有key值与value值,在某些时候我们Java中有些业务需要对HashMap的value进行排序,当你的value是一个对象;而你需要按照对象的某一个属性对HashMap进行排序时候,我们不得不进行相关操作,所以我写了一个小例子,解决这种问题,这也是我工作中遇到的问题。下面从代码解说:

一、创建一个对象必须继承Comparable

[Java] 纯文本查看 复制代码
?

package cn.gdin.test;

public class CaptureBean implements Comparable<CaptureBean>{

private String url;
private long dt;


public String getUrl() {
    return url;
}


public void setUrl(String url) {
    this.url = url;
}


public long getDt() {
    return dt;
}


public void setDt(long dt) {
    this.dt = dt;
}


@Override
public int compareTo(CaptureBean another) {
    return (int) (this.dt-another.dt);            //对于你要比较的属性值进行对比,请注意返回负值与正值的含义。
}

}

二、主工程例子

[Java] 纯文本查看 复制代码
?

package cn.gdin.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class Test {

private static Map<Integer, CaptureBean> mCaptureUrlsO2O = new HashMap<Integer, CaptureBean>();//实例一个对象
/**

  • @param args

*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建三个要排序的对象
CaptureBean o1 = new CaptureBean();
o1.setDt(100004);
o1.setUrl("o1");
CaptureBean o2 = new CaptureBean();
o2.setDt(100002);
o2.setUrl("o2");
CaptureBean o3 = new CaptureBean();
o3.setDt(100003);
o3.setUrl("o3");

mCaptureUrlsO2O.put(1, o1);
mCaptureUrlsO2O.put(2, o2);
mCaptureUrlsO2O.put(3, o3);

Collection<CaptureBean> values=mCaptureUrlsO2O.values();

             List<CaptureBean> list=new ArrayList<CaptureBean>(values);
            Collections.sort(list);//对列表进行排序


            Iterator iterator = mCaptureUrlsO2O.keySet().iterator();
              System.out.println("change before");
             while (iterator.hasNext()) {//输出原来的排序
    System.out.println( mCaptureUrlsO2O.get(iterator.next()).getUrl());
    }
     
    Iterator iteratorAfter = mCaptureUrlsO2O.keySet().iterator();
    int j=0;
    System.out.println("change after");
    while (iteratorAfter.hasNext()) {
    int k =(Integer) iteratorAfter.next();
         mCaptureUrlsO2O.put(k,list.get(j) );//替换原来的排序
         System.out.println( mCaptureUrlsO2O.get(k).getUrl());
         j++;
    }
   

}

}

  

三、控制台输出结果:

[Java] 纯文本查看 复制代码
change before
o1
o2
o3
change after
o2
o3
o1

四、总结

      对于里面的集合类的运用不多说,这里只是提供方案,关于知识点需要自己归纳!希望对你有所帮助,也许这不是最佳方案,谢谢!

——本文转载自CSDN。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java中的HashMap和TreeMap
HashMap和TreeMap两者都是Map,java中的Map以键值对来存储数据,通过键key来索引值value。HashMap通过hashcode对其内容进行快速查找,其结果时无序的;TreeMap中的所有元素都默认进行了排序,所以当需要一个有序的结果时,使用TreeMap是比较方便的。具体的定义和遍历方法,可以看下面的例子:
Wesley13 Wesley13
3年前
java中map接口hashMap以及Enty之间的用法和关系
java中map接口hashMap以及Enty之间的转换首先说的是map接口:Map提供了一种映射关系,其中的元素是以键值对(keyvalue)的形式存储的,能够实现根据key快速查找value;建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。Ma
Stella981 Stella981
3年前
Collectors.groupingBy分组后的排序问题
默认groupingBy代码里会生成一个HashMap(hashMap是无序的,put的顺序与get的顺序不一致)HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已
Stella981 Stella981
3年前
HashMap原理学习
概述HashMap对于做Java的小伙伴来说太熟悉了。估计你们每天都在使用它。它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着这些疑问让我们来了解HashMap!HashMap介绍1、介绍HashMap是一个用”KEY”“VALUE”
Wesley13 Wesley13
3年前
Java面试总结
1. HashMap与HashTable的区别Hashmap的key、value都可以为空,但key只能有一个为空,value可以有多个,非同步HashTable的key、value都不能为空,是同步的,线程安全因为hashtable,concurrenthashmap它们是用于多线
Stella981 Stella981
3年前
Key
KeyValue是用一个不可重复的key集合对应可重复的value集合。(典型的例子是字典:通过页码的key值找字的value值)。例子:key1—value1;key2—value2;key3—value3.SortedMap:如果一个Map可以根据key值排序,则称其为SortedMap。(如字典)!!注意数组和集合的区别:数组
Stella981 Stella981
3年前
HashMap Hashtable 的区别
Hashtable 和 HashMap作为 Map 的基本特性两者都实现了Map接口,基本特性相同\          对同一个Key,只会有一个对应的value值存在\          如何算是同一个Key?首先,两个key对象的hash值相同,其次,key对象的equals方法返回真内部数据结构Hashtab
Wesley13 Wesley13
3年前
Java对List元素进行按自定义排序
有时候我们需要对list进行排序,方便我们查阅,下面就是本人做的一个小测试。packagewww.huarui.biz.jfreecharts;publicclassBuffBean{privateStringmonthnull;privateintcount0;publicStringget
Wesley13 Wesley13
3年前
10 HashSet HashMap源码 Properties
2HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象(该对象我们用不上);3\.HashMap底层维护一个Node数组,我们向HashMap中所放置的对象实际上是存储在该数组当中;HashMap中的Pu
Stella981 Stella981
3年前
C#.NET 对HashTable数组进行按值排序
C.NET对HashTable数组进行按值排序  最近做了一个项目,需要对一个2维数组的值进行排序然后再取出对应的Key值。开始是用HashTable做的,不过HashTable中的排序只是对Key进行排序,如果想对值进行排序得用其它办法。下面我就把这种方法说下:一.我们先假设一个二维数组,用HashTab
九路 九路
2年前
Java HashMap源码分析
我们知道,HashMap是最常用的key,value结构之一,也是面试官最爱问的面试题之一今天我们就来从源码角度来解析一下,HashMap底层的原理