java hashmap按照value来排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java hashmap按照value来排序相关的知识,希望对你有一定的参考价值。

如下程序想按照value值来排序,打印出成绩前三名的同学信息,求帮忙,多谢了!

HashMap<String,Integer> sMap = new HashMap<String,Integer>();
sMap.put("张三", 90);
sMap.put("李四", 79);
sMap.put("王五", 88);
sMap.put("赵六", 76);

参考技术A ArrayList<Entry<String,String>> list = new ArrayList<Entry<String,String>>(sMap.entrySet());

Collections.sort(list, new Comparator<Object>()
public int compare(Object e1, Object e2)
int v1 = Integer.parseInt(((Entry<String,String>)e1).getValue().toString());
int v2 = Integer.parseInt(((Entry)e2).getValue().toString());
return v1-v2;


);

for (Entry<String, String> e: l)
System.out.println(e.getKey()+" "+e.getValue());
本回答被提问者和网友采纳
参考技术B 你这种方法不科学,应该单独写一个类,包含姓名,分数属性,实现compareable接口。进行排序。 参考技术C 别用hashmap,用treemap
key存放分数,value存放姓名追问

哈哈,这样的话就没办法举一反三了,下次万一遇到一个不能这样搞得,那不就亏了吗

追答

map里面有个value视图,先把value取出来,然后排序
hashmap本来就是无序的,通过hashmap来排序不可取

追问

把value排序的话,有可能之后就打乱了key与value的一一对应关系,更何况value的值有可能重复的

追答

value只是一个试图啊,key是不可更改的
可以把value试图取出来存到一个list里面,然后用java的快速排序就可以了

java程序读一个文本文件并用hashmap进行存储,并对其中的信息按照姓名排序

给你发一个完整的吧,反正我电脑上有,
/**
* 存储关联的键值对
* @param key:键
* @param value:值
* @return
*/
public V put(K key, V value)
//当键值为null时,调用putForNullKey(value)的方法存储,
//在该方法中调用recordAccess(HashMap<K,V> m)的方法处理
if (key == null)
return putForNullKey(value);
//根据key的KeyCode,计算hashCode
int hash = hash(key.hashCode());
//调用indexFor方法,返回hash在对应table中的索引(Entry[] table)
int i = indexFor(hash, table.length);
//当i索引处的Entry不为null时,遍历下一个元素
for (Entry<K,V> e = table[i]; e != null; e = e.next)
Object k;
//如果遍历到的hash值等于根据Key值计算出的hash值并且
//key值与需要放入的key值相等时,存放与key对应的value值
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
//覆盖oldValue的值
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;



modCount++;
//当i索引处的Entry为null时,将指定的key、value、hash条目放入到指定的桶i中
//如果现有HashMap的大小大于容量*负载因子时,resize(2 * table.length);
addEntry(hash, key, value, i);
return null;


/实例化HashMap对象
HashMap<String,String> hashMap=new HashMap<String,String>();
//1、将Map接口变为Set接口
Set<Map.Entry<String,String>> set=hashMap.entrySet();
//2、实例化Iterator接口
Iterator it=set.iterator();
while(it.hasNext())
//3、得到存储在HashMap中的Entry对象
Map.Entry<String,String> me=(Entry<String, String>) it.next();
//4、通过Entry得到key和value
System.out.println("Key="+me.getKey()+"Value="+me.getValue());


HashMap<Student,String> map=new HashMap<Student,String>();
map.put(new Student("1608100201","Jony"), "CSU");
System.out.println(map.get(stu));
//实例化一个学生对象
Student stu=new Student("1608100201","Jony");
HashMap<Student,String> map=new HashMap<Student,String>();
map.put(stu, "CSU");
System.out.println(map.get(stu));
public class Student
//学生的学号属性
public static String ID;
//学生的姓名属性
private String name;
/*
* 重载构造方法
*/
public Student(String ID,String name)
this.ID=ID;
this.name=name;


/**
* 覆写equals()方法
*/
public boolean equals(Object obj)
//判断地址是否相等
if(this==obj)
return true;

//传递进来用于比较的对象不是本类的对象
if (!(obj instanceof Student))
return false;
//向下转型
Student stu = (Student)obj;
//比较属性内容是否相等
if (this.ID.equals(stu.ID)&&this.name.equals(stu.name))
return true;

return false;

/**
* 覆写hashCode()方法
*/
public int hashCode()
return this.ID.hashCode();



祝你好运了!~
参考技术A 楼主,这个编程的需求,太宽范围了。 参考技术B 直接把文本文件发给我(主要是看格式),然后我给你发JAVA文件可以直接用。
QQ:5959563 答1

以上是关于java hashmap按照value来排序的主要内容,如果未能解决你的问题,请参考以下文章

Java HashMap按key排序和按value排序的两种简便方法

java 深入HashMap

Java学习 提高篇---HashMap 。

Java中Map按照值排序

HashMap与TreeMap按照key和value排序

HashMap分别按照key和value进行排序的快捷方法