一个简单的需求,求更高效的算法
问题描述:
一个集合总存在n个对象,每个对象的值不同,如:对象中存在itemCode,ageCode,itemName等属性.
问题是,如果出现itemCode和ageCode相同时则合并,并计算出相同的个数,存入到另一集合。
以下是我自己写的,但是感觉不是太好,想看看大家有没更好的办法
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)); }public class KeyCounter extends HashMap<String, Integer> { private void addKeyCount(String key) { if (!containsKey(key)) { put(key, 1); } else { put(key, get(key) + 1); } }}
[解决办法]
不好意思,上面的private void addKeyCount(String key)
[解决办法]
楼主加油.....................
[解决办法]
其实楼主的那个方法还可以,楼主太精益求精了,加油
[解决办法]
楼主的问题用一次循环,一个hashmap就可以搞定,算法思想如下:
1、循环遍历集合中的对象
2、在循环中做如下处理:
1>构造hashmap的key
2>判断hashmap中是否存在key,如果不存在则该key对应的value为1,如果存在则将该key对应的 value加1