· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [访谈] 网银安全系列访谈之:惊心动魄网银故事
· [热点专题] 网银安全系列 3G上网卡巡礼
· [订阅IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 跨站脚本十二问 四步防范Conficker
· [热点] Windows 7 RC版公开下载 憾缺中文版

HashMap中的对象根据成员进行自定义排序

发布时间:2008.03.06 04:56     来源:赛迪网    作者:dongzc

HashMap中的对象根据成员进行自定义排序 
 
      Map是Java中最常用的存储对象的集合类之一,存储在HashMap中的对象在取出时是无序的,下文以示例介绍了如果对HashMap中存储的对象根据成员进行自定义排序。

应用说明:计算缓存对象的点击次数按次数排序输出。

1. 定义CacheObj类

定义了一个简单的对象,这个对象将存储在一个HashMap中,希望根据CacheObj中的整型成员变量cachedCounter进行排序输出。

  
/*
 * Created on 2003-3-5
 */
package com.cache;
/**  * @author Weidong *  */
public class CacheObj {
  int cachedCounter;
  Object cacheObj = null;
  /**
   * @return Returns the cacheObj.
   */
  public Object getCacheObj() {
    return cacheObj;
  }
  /**
   * @param cacheObj
   *          The cacheObj to set.
   */
  public void setCacheObj(Object cacheObj) {
    this.cacheObj = cacheObj;
  }
  /**
   * @return Returns the cachedCounter.
   */
  public int getCachedCounter() {
    return cachedCounter;
  }
  /**
   * @param cachedCounter
   *          The cachedCounter to set.
   */
  public void setCachedCounter(int cachedCounter) {
    this.cachedCounter = cachedCounter;
  }
}


 

2. 自定义HotItemComparator 

HotItemComparator实现了Comparator 接口, 实现的方法非常简单就是根据cachedCounter进行比较返回比较结果

正序:return obj1.getCachedCounter() - obj2.getCachedCounter();

倒序:return obj2.getCachedCounter() - obj1.getCachedCounter();

  
package com.cache;
import java.util.Comparator;
/**
 * @author Weidong 
 */
public final class HotItemComparator implements Comparator {
    /*
     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
     */
    public int compare(Object arg0, Object arg1) {
        CacheObj obj1 = (CacheObj) arg0;
        CacheObj obj2 = (CacheObj) arg1;
        return obj1.getCachedCounter() - obj2.getCachedCounter();
    }
}


3. 测试用例

定义变量:public static final Comparator HOT_ITEM = new HotItemComparator(); 
将HashMap追加到List对象sortList中:sortList.addAll(caches.values()); 
对sorList应用HOT_ITEM排序:Collections.sort(sortList, HOT_ITEM);

package com.cache;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * @author Weidong
 */
public class TestBean {
    public static final Comparator HOT_ITEM = new HotItemComparator();
 
    public static void sortMap() {
        Map caches = new HashMap();
        CacheObj s1 = new CacheObj();
        s1.setCachedCounter(2);
        CacheObj s2 = new CacheObj();
        s2.setCachedCounter(3);
        CacheObj s3 = new CacheObj();
        s3.setCachedCounter(1);
        caches.put("1", s1);
        caches.put("2", s2);
        caches.put("3", s3);
 
        List sortList = new ArrayList();
        sortList.addAll(caches.values());
        Collections.sort(sortList, HOT_ITEM);
        Iterator iter = sortList.iterator();
        while (iter.hasNext()) {
            CacheObj s = (CacheObj) iter.next();
            System.out.println("counter is "+s.getCachedCounter());
        }
    }
    public static void main(String[] args) {
        sortMap();
    }
}

输出:文中用正序

counter is 1
counter is 2
counter is 3 
      (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 进阶:怎样使用AJAX进行WEB应用程序开发 (03-05) · 如何正确的选择适合自己的WEB报表工具 (03-05)
· 开发工具:程序员应如何提高系统分析能力 (03-05) · 程序人生-- 一些编程初学者的良言警句 (03-05)
· JSP/Servlet/JSF:Servlet/JSP配置详解 (03-05) · Java语言深入--关于Java语言的内存泄漏 (03-05)
· 设计及设计模式:对于模式的“十大误解” (03-05) · JSP/Servlet:JSF相对于Struts的一些优点 (03-05)
· J2EE综合--总结java编程中的经验教训 (03-05) · 程序人生--软件人才需具备6个基本素质 (03-05)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
2009第七届中国电脑商年会直播
·创业投资系列访谈:产业..
·特别策划:视频网站系列..
·专题:网游虚拟货币新规..
专题:6月上市手机新品回顾及7月新机展望
·2009年中国电信业信息化..
·专题:把iPhone 3GS“解..
·WAPI重启国际标准进程 ..
专题:09年中盘点-联想春季打印机新品回顾
·InfoComm 2009 视听与集..
·网游背后的故事 网游服..
·[专题]联想ThinkPad T40..
BizSpark:微软为技术创业企业点燃火花
·社区活动:我的IT求知生..
·访谈:内网安全2009系列..
·安全访谈:网银安全之Sa..