日期:2014-05-20  浏览次数:20710 次

一个简单的需求,求更高效的算法
问题描述:
一个集合总存在n个对象,每个对象的值不同,如:对象中存在itemCode,ageCode,itemName等属性.
问题是,如果出现itemCode和ageCode相同时则合并,并计算出相同的个数,存入到另一集合。

以下是我自己写的,但是感觉不是太好,想看看大家有没更好的办法
Java code

        List list = getList();
        Set set1 = new HashSet();
        for (int i = 0; i < list.size(); i++) {
            Person p = (Person)list.get(i);
            set1.add(p.getAgeCode()+"-"+p.getItemCode());
        }
        Map result = new HashMap();
        Iterator it = set1.iterator();
        while(it.hasNext()){
            int j = 1;
            String item = it.next().toString();
            for (int i = 0; i < list.size(); i++) {
                Person p = (Person)list.get(i);
                if(item.equals(p.getAgeCode()+"-"+p.getItemCode())){
                    result.put(p.getAgeCode()+"-"+p.getItemCode(),j++);
                }
            }
        }

        Set set2 = result.keySet();
        Iterator it2 = set2.iterator();
        while(it2.hasNext()){
            String key = it2.next().toString();
            System.out.println("result:"+key+":"+result.get(key));
        }





------解决方案--------------------
一个集合总存在n个对象,每个对象的值不同,如:对象中存在itemCode,ageCode,itemName等属性.
问题是,如果出现itemCode和ageCode相同时则合并,并计算出相同的个数,存入到另一集合。

如果出现itemCode和ageCode相同时则合并:说明使用itemCode和ageCode可以联合生成一个唯一的键,
所以使用一个HashMap去存储,键是对象的itemCode和ageCode可以联合生成的键, 值是这个对象。
当插入新的对象时,判断此键是否存在,如存在则合并,不存在就插入。
这样就不用遍历所有的对象了,使用Hash的特性能提高性能
------解决方案--------------------
下面是一个专门用于这样的计数的类:
Java code
public class KeyCounter extends HashMap<String, Integer> {

    private void addKeyCount(String key) {
        if (!containsKey(key)) {
            put(key, 1);
        } else {
            put(key, get(key) + 1);
        }
    }
}

------解决方案--------------------
不好意思,上面的
Java code
private void addKeyCount(String key)

------解决方案--------------------
楼主加油.....................
------解决方案--------------------
其实楼主的那个方法还可以,楼主太精益求精了,加油
------解决方案--------------------
楼主的问题用一次循环,一个hashmap就可以搞定,算法思想如下:
1、循环遍历集合中的对象
2、在循环中做如下处理:
1>构造hashmap的key
2>判断hashmap中是否存在key,如果不存在则该key对应的value为1,如果存在则将该key对应的 value加1