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

list 去重复值,(购物车的实现习题)

2013-10-31 
list 去重复值,(购物车的实现练习)jspjava?j2ee对象[解决办法]那就别用List了, 用Map ,用Goods当key , val

list 去重复值,(购物车的实现练习)

                                                  jsp                    java?j2ee                    对象                                              
[解决办法]
那就别用List了, 用Map ,用Goods当key , value为数量。

添加商品的时候,先从Map中判断是否已存在该Goods ,如果存在就将该Goods的value+1,否则就添加新的Goods进入Map,value=1

要注意的是重写Goods对象的equalse与hashCode 。那要看你有具体怎么去设计了, 如果你的Goods只有一个名字,并没有其他什么参数,比如颜色/大小 等, 那么可以直接用Id或名字来判断,否则就要将这些属性都对应进行比较。
[解决办法]

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class ListTest1 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

List<ObjectItem> list = new ArrayList<ObjectItem>();
list.add(new ObjectItem(2));
list.add(new ObjectItem(2));
list.add(new ObjectItem(2));
list.add(new ObjectItem(3));

Set<ObjectItem> s = new HashSet<ObjectItem>();
for(ObjectItem o : list){
s.add(o);
}

Iterator<ObjectItem> it = s.iterator();
while(it.hasNext()){
System.out.println(it.next().getId());
}

}

}

class ObjectItem {
private Integer id;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public ObjectItem(Integer id){
this.id = id;
}

public boolean equals(Object obj) {
        if(obj instanceof ObjectItem) {
        ObjectItem n = (ObjectItem)obj;
            if(id == n.id) {
                return true;
             
            }else return false;
        }
         
        return false;
    }
 
    public int hashCode() {
        return id.hashCode();
    }
}

[解决办法]
建议还是写比较器、因为你的List重复的对象都是独立的。利用==比较结果都是false ,无法准确的判断是否是重复商品。
写一个比较器去判断对象内的每一个属性。把相同的结果存放在Map当中。Value 用来统计重复数量。

热点排行