HashMap中的key是字符串类型的,而value是一个定义的数据结构类型的,其中包括(String strIP, long startTime......),现在想写一个函数对value中的strIP或者startTime进行排序,应该怎样处理?用什么样的方法?

解决方案 »

  1.   

    只能是把value里面的对象取出来,再通过编码来排序。想直接在hashmap里面操作,是没法搞的。
      

  2.   

    HashMap.get() 
    //store in list 
    implements Comparable
    Collections.sort()
      

  3.   

    如果要取出对象的话,是不是用HashMap.values()方法?但是我现在的value是一个结构体啊,只是想按照value中的一个变量去排序,可以sort()方法吗?
      

  4.   

    把value存入另一个容器再排序
      

  5.   

    implements Comparable 可Sort
      

  6.   

    yanxiazhiqiu(if the words don't come my way...) 哥们,能不能说的详细点啊?最好有代码示范 谢谢了!
      

  7.   

    what's matter with LinkedHashMap
    TreeMap(sorted by key,not value)
      

  8.   

    value,需要放到一个容器里,才可以进行排序!
      

  9.   

    你要按value object中的某个comparable成员排序,我的意思是 是不是也要确定它的key是哪个啊,如果要保留这个value的key就要取出来啊,如果不care key,那就不用取了
      

  10.   

    import java.util.*;
    import java.io.*;
    class Student {
    private String name;
    private float score;public Student(String name ,float score)
    {
    this.name = name;
    this.score = score;
    }public Student()
    {
    name = null;
    score = 0;
    }public String getName()
    {
    return name;
    }public float getScore()
    {
    return score;
    }public void setName(String name)
    {
    this.name = name;
    }public void setScore(float score)
    {
    this.score = score;
    }
    }public class Test {public static void main(String[] args)
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Hashtable  v = new Hashtable();
    String line = "Start";
    String name = null;
    float  score = 0f;
    int i = 0;// 输入
    while(!line.equalsIgnoreCase("exit"))
    {try{
    System.out.print("请输入学生名:");
    line = br.readLine();
    if (line.equalsIgnoreCase("exit"))
    break;
    name = line;
    System.out.print("请该生输入成绩:");
    line = br.readLine();
     
    try {
    score = Float.parseFloat(line);
    }catch (NumberFormatException  e)
    {
    score = 0;
    }
    Student student = new Student(name,score);i ++;v.put(new Integer(i),student);
    }catch (IOException e){
    e.printStackTrace();
    }
    }Object[] obj = v.values().toArray();
    // 排序
    Arrays.sort(obj, new Comparator() {public int compare(Object o1, Object o2) {
    Student stu1 = (Student)o1;
    Student stu2 = (Student)o2;return (int)(stu1.getScore() - stu2.getScore());
    }public boolean equals(Object obj) { return true ;}
    });
    // 输出
    for (int i = 0; i < obj.length; i ++)
    {
    Student stu = (Student)obj[i];
    System.out.println("学生:" + stu.getName() + " 成绩:" + stu.getScore());
    }
    }
    }
    运行输出:
    F:\>javac Test.javaF:\>java Test
    请输入学生名:stu1
    请该生输入成绩:26
    请输入学生名:stu2
    请该生输入成绩:56
    请输入学生名:stu3
    请该生输入成绩:45
    请输入学生名:stu9
    请该生输入成绩:73
    请输入学生名:stu8
    请该生输入成绩:45
    请输入学生名:exit
    学生:stu1 成绩:26.0
    学生:stu3 成绩:45.0
    学生:stu8 成绩:45.0
    学生:stu2 成绩:56.0
    学生:stu9 成绩:73.0若要降序输出,只需要将下面语句改为:
    public int compare(Object o1, Object o2) {
    Student stu1 = (Student)o1;
    Student stu2 = (Student)o2;return (int)(stu2.getScore() - stu1.getScore()); // stu2 与 stu1 对换
    }
      

  11.   

    本页面上有:CSDN - 技术社区 - Java J2SE / 基础类问题  
     回复 | 收藏此页 | 专题 | 公告 | 管理 | 保存 | 关闭窗口   你点击[管理],输入分数,密码,点击[给分]