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

怎么删除Map中已经存在的对象

2012-09-10 
如何删除Map中已经存在的对象Java code//Mercha.javapublic class Mercha {private String comname //商

如何删除Map中已经存在的对象

Java code
//Mercha.javapublic class Mercha {        private String comname ;//商品名称    private String comprice ;//商品价格    private String comnum ; //商品数量        //名称            public void setComname(String comname){            this.comname=comname;        }                public String getComname() {            return comname;        }                //价格                public void setComprice (String comprice){            this.comprice=comprice;        }                public String getComprice (){            return comprice ;        }                //商品数量                public void setComnum(String comnum){            this.comnum=comnum;        }                public String getComnum(){            return comnum;        }                        }



Java code
//商品类//Commoditystatic Map<Object, Object> commodity = new HashMap<Object, Object>();// 储存商品// ////添加数据        Mercha mer1 = new Mercha();        mer1.setComname("海尔");        mer1.setComprice("120.0");        mer1.setComnum("100");        // ////数据        Mercha mer2 = new Mercha();        mer2.setComname("大中");        mer2.setComprice("150.0");        mer2.setComnum("120");        // /////////数据        Mercha mer3 = new Mercha();        mer3.setComname("长虹");        mer3.setComprice("190.0");        mer3.setComnum("135");        commodity.put(mer1, mer1);        commodity.put(mer2, mer2);        commodity.put(mer3, mer3);        // 输出        do {            Mercha mer5 = new Mercha();// 用于将处理后的商品信息转交至支付中心的Map<>.            System.out.println(">>>>>>>>>>>>商品处理中心");            System.out.println("商品名称" + "\t\t" + "商品数量" + "\t\t" + "商品价格");            for (Object obj : commodity.keySet()) {                System.out.println(((Mercha) commodity.get(obj)).getComname()                        + "\t\t" + ((Mercha) commodity.get(obj)).getComnum()                        + "\t\t" + ((Mercha) commodity.get(obj)).getComprice());            }            //commodity.clear();// 输出之后,清空map<>,防止重复添加                            for (Map.Entry<Object, Object> entry : commodity.entrySet()) {                    // mer5.getComname()                    commodiname = ((Mercha) entry.getKey()).getComname();// 商品名称                    commodinum = mer4.getComnum();// 购买的数量<控制台输入>                    commodiprice = ((Mercha) entry.getValue()).getComprice();// 商品价格                    // 处理商品数量过程                    String commodinums = ((Mercha) entry.getValue())                            .getComnum();// 商品总数量<已定义>                    commodinums_always = Integer.valueOf(commodinums)                            .intValue();// 获得商品总数量<String转int>                    commodinums_buy = Integer.valueOf(commodinum).intValue();// 购买数量<String转换为int>                    commodinums_results = commodinums_always - commodinums_buy;// 获得已经售出后的商品数量<int>                    commodinums_resultss = Integer                            .toString(commodinums_results);// 将int转为String.                    // 处理数量过程结束                    if (mer4.getComname().equals(commodiname)                            && commodinums_buy <= commodinums_always                            && commodinums_buy > t.Minnum) {// 值比较:查找是否有相应商品,并且数量是否大于所要购买的数量                                                // 用一个对象接收上面的值.然后再将对象传入支付类中的map                        mer5.setComname(commodiname);// 1.用对象存储名称                        mer5.setComnum(commodinum);// 2.存储价格                        mer5.setComprice(commodiprice);// 3.存储购买数量<控制台输入的值>                        pay.pays.put(mer5, mer5);// 将上述信息放入支付类的map<>.                        System.out.println("购买成功!");                        mer6.setComname(commodiname);// 1.用对象存储名称                        mer6.setComprice(commodiprice);// 2.存储价格                        mer6.setComnum(commodinums_resultss);// 3.存储数量<已变化>                        findname = true;// 找到商品,findname为真                    }                }                 



假如要修改mer2的商品数量(因为购买后要减去相应数量再输出.[不能在迭代的时候修改数据]),如何先去掉mer2,然后在添加最新的mer6到map.求教高人,谢谢了、

[解决办法]
你把Mercha 这个类作为Key。
最好在这个类里,至少实现了equals、否则可能删不掉。(尽可能也实现hashCode方法)
还有定义时最好写成 Map<Mercha , Mercha >



参考:
map的remove。
V remove(Object key)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。更确切地讲,如果此映射包含从满足 (key==null ? k==null :key.equals(k)) 的键 k 到值 v 的映射关系,则移除该映射关系。(该映射最多只能包含一个这样的映射关系。) 
返回此映射中以前关联该键的值,如果此映射不包含该键的映射关系,则返回 null。 

如果此映射允许 null 值,则返回 null 值并不一定 表示该映射不包含该键的映射关系;也可能该映射将该键显示地映射到 null。 

调用返回后,此映射将不再包含指定键的映射关系。 


参数:
key - 从映射中移除其映射关系的键 
返回:
以前与 key 关联的值;如果没有 key 的映射关系,则返回 null。 
抛出: 
UnsupportedOperationException - 如果此映射不支持 remove 操作 
ClassCastException - 如果该键对于此映射是不合适的类型(可选) 
NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选)
[解决办法]
+1
探讨
你把Mercha 这个类作为Key。
最好在这个类里,至少实现了equals、否则可能删不掉。(尽可能也实现hashCode方法)
还有定义时最好写成 Map<Mercha , Mercha >



参考:
map的remove。
V remove(Object key)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。更确切地讲,如果此映射包含从满足 (key==nu……

热点排行