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。如果能有其他方式完成这种快速访问,也可以试试。 展开
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。如果能有其他方式完成这种快速访问,也可以试试。 展开
1个回答
展开全部
是自己做这个算法么,还是要用到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里
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询