JAVA:hashmap根据自定义类型的属性排序

自定义类型classVertex{StringvertexName;//顶点的名字intdegree;//顶点的度intkcore;//顶点的kcore值List<Ver... 自定义类型
class Vertex{
String vertexName; //顶点的名字
int degree ; //顶点的度
int kcore ; //顶点的kcore值
List<Vertex> link; //顶点连接的其他顶点
}
map: HashMap<String,Vertex> 其中的String存放的就是顶点的名字

现在想给hashMap里面的内容排序,要求根据degree”顶点度“排序。要怎么实现呢?升序和降序都要。
不同的顶点可能有相同的degree。
也不是一定要hashmap,如果treemap能实现的话也行。 Vertex的结构不能改变。
主要目的:
要按照degree的大小排好序,或者把排好序的再转存到某个list之中(要多次使用排好序的集合)。能够按顺序输出。
当知道某个Vertex的name的时候,能迅速的找到这个Vertex并获取其他属性信息。因为不想每次遍历集合去找出Vertex,所以才用的map。如果能有其他方式完成这种快速访问,也可以试试。
展开
 我来答
百度网友9c743b7
2015-05-02 · TA获得超过925个赞
知道小有建树答主
回答量:360
采纳率:100%
帮助的人:315万
展开全部
是自己做这个算法么,还是要用到java的数据结构,因为hashmap是无序的,Treemap是有序的,但是他们排序不是看value是看key的,是必须这样做么,因为我想如果你用hashMap你是用key来访问里面value的,排不排序意义不大,我建议用TreeSet排序,如果你需要用name就直接遍历set的时候取name就完了,如果不想改变原来的类的结构,就用list加comparator做,如果还是要用map就把排好序的set或list以name为key再放到map里
更多追问追答
追问
“如果你需要用name就直接遍历set的时候取name就完了,如果不想改变原来的类的结构,就用list加comparator做,如果还是要用map就把排好序的set或list以name为key再放到map里”
这个能详细点么?
问题有补充,请先看看
追答

如果不想让Vertex实现其他接口,就独立做个comparator,构造方法是我为了用加的,toString方法只是为了看输出方便,你自己可以不用就都删掉

ArrayList<Vertex> list = new ArrayList<Vertex>();
        for (String s : map.keySet()) {
            list.add(map.get(s));
        }
        
        Collections.sort(list, new Comparator<Vertex>() {
            @Override
            public int compare(Vertex arg0, Vertex arg1) {
                return arg1.degree - arg0.degree;//顺序相反就让arg0-arg1
            }
        });
//字数限制代码贴不全,这个就是你需要加的代码,map就是你原来的map,如果需要像你说的用name取就以name为key再放到一个新的HashMap里
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式