首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个容易的需求,求更高效的算法

2012-09-27 
一个简单的需求,求更高效的算法问题描述:一个集合总存在n个对象,每个对象的值不同,如:对象中存在itemCode,

一个简单的需求,求更高效的算法
问题描述:
一个集合总存在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

热点排行