HashMap排序-按对象中某一个成员变量的值排序

 

 public static void main(String[] args) {

  Map<String, User> map = new HashMap<String, User>();
  User usrs1 = new User(2);
  User usrs2 = new User(10);
  User usrs3 = new User(15);
  User usrs4 = new User(7);
  map.put("d", usrs1);
  map.put("c", usrs2);
  map.put("b", usrs3);
  map.put("a", usrs4);

  List<Map.Entry<String, User>> infoIds = new ArrayList<Map.Entry<String, User>>(
    map.entrySet());

  // 排序前
  for (int i = 0; i < infoIds.size(); i++) {
   String id = infoIds.get(i).toString();
   System.out.println(id);
  }

  // 排序
  Collections.sort(infoIds, new Comparator<Map.Entry<String, User>>() {
   public int compare(Map.Entry<String, User> o1,
     Map.Entry<String, User> o2) {
    User u1 = (User) o1.getValue();
    User u2 = (User) o2.getValue();
    long num1 = u1.getUsers();
    long num2 = u2.getUsers();

    return (int) (num2 - num1);
   }
  });

  // 排序后
  // for (int i = 0; i < infoIds.size(); i++) {
  // String id = infoIds.get(i).toString();
  // System.out.println(id);
  // }

  // 将HASHMAP中的数据排序-------------------------------------------
  for (Iterator iter = infoIds.iterator(); iter.hasNext();) {
   Map.Entry entry = (Map.Entry) iter.next();
   String key = (String) entry.getKey();
   User values = (User) entry.getValue();
   System.out.println(key + "," + values.toString());

  }

 }

 

public class User {

 private long num;

 public void setUsers(long num) {
  this.num = num;
 }

 public long getUsers() {
  return num;
 }

 public User(long num) {
  super();
  this.num = num;
 }

 @Override
 public String toString() {
  return "Users [users=" + num + "]";
 }
 
 
}

 

下面是按照按value来排序

Map<String, Long> map = new HashMap<String, Long>();
  map.put("d", (long) 2);
  map.put("c", (long) 4);
  map.put("b", (long) 1);
  map.put("a", (long) 3);

  List<Map.Entry<String, Long>> infoIds = new ArrayList<Map.Entry<String, Long>>(
    map.entrySet());

  // 排序前
  for (int i = 0; i < infoIds.size(); i++) {
   String id = infoIds.get(i).toString();
   System.out.println(id);
  }
  // d 2
  // c 1
  // b 1
  // a 3

  // 排序
  Collections.sort(infoIds, new Comparator<Map.Entry<String, Long>>() {
   public int compare(Map.Entry<String, Long> o1,
     Map.Entry<String, Long> o2) {
    // return (o2.getValue() - o1.getValue());
    // return (o1.getKey()).toString().compareTo(o2.getKey());
    return (int) (o2.getValue() - o1.getValue());
   }
  });

  // 排序后
//  for (int i = 0; i < infoIds.size(); i++) {
//   String id = infoIds.get(i).toString();
//   System.out.println(id);
//  }
 
  // 将HASHMAP中的数据排序-------------------------------------------
  for (Iterator iter = infoIds.iterator(); iter.hasNext();) {
  Map.Entry entry = (Map.Entry) iter.next();
  String key = (String)entry.getKey();
  Long values  = (Long) entry.getValue();
  System.out.println(key+","+values);
  
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值