为了账号安全,请及时绑定邮箱和手机立即绑定

list去除重复项,求教大神,谢谢

list去除重复项,求教大神,谢谢

心有法竹 2019-03-13 18:15:52
遇到的的问题我建立了一个list,泛型是Bean,Bean中的三个对象都是String类型,如何去除重复项得到这样的结果:数电, 75, 5线代, 33, 32 相关代码ArrayList<Bean> list = new ArrayList<Bean>();            list.add(new Bean("数电", "75", "5"));            list.add(new Bean("线代", "33", "3"));            list.add(new Bean("数电", "36", "5"));            list.add(new Bean("线代", "43", "3"));3 已经尝试过哪些方法仍然没解决ArrayList<Bean> listCopy = new ArrayList<Bean>();for(Bean b:list){            if (!listCopy.contains(b)) {                listCopy.add(b);            }        }
查看完整描述

4 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

if (!listCopy.contains(b)) {

是有问题的。

new Bean("数电", "75", "5")

new Bean("数电", "36", "5")

是不同的对象,所以contains返回false。


遍历listCopy,看看是否存在某个元素,它的第一个字段equals当前对象b的相应字段。


for(Bean b:list){

    if ( ! isDuplicate(listCopy, b) ) {

        listCopy.add(b);

    }

}

boolean isDuplicate (ArrayList<Bean> list, Bean b) {

    for (Bean elem : list) {

        if (elem.getCourse().equals(b.getCourse()) return true;

    }

    return false;

}

还有一种方法:重写Bean的equals函数。

重写equals看起来很优雅,但是有个前提,即符合equals的语义。第一个字段相等就意味着两个Bean相等吗?这是值得商榷的。

equals方法具有很特殊的含义,需慎用。


从可读性的角度看,也是直接比较字段比较好。读者一眼就能看出你的意图。


查看完整回答
反对 回复 2019-04-16
?
动漫人物

TA贡献1815条经验 获得超10个赞

重写equal hash


查看完整回答
反对 回复 2019-04-16
?
波斯汪

TA贡献1811条经验 获得超4个赞

这是我的代码,运行通过:

重写equals(),getSubName是Bean的一个方法


@Override

    public boolean equals(Object obj) {

        // TODO Auto-generated method stub

        if(this == obj){

            return true;

        }

        if (obj == null) {

            return false;

        }

        if(getClass() != obj.getClass()){

            return false;

        }

        final Bean bean = (Bean)obj;

        if (this.getSubName() != bean.getSubName()) {

            return false;

        }

        

        return true;

    }

ArrayList<Bean> listCopy = new ArrayList<Bean>();

for(Bean bean:list){

            if (!listCopy.contains(bean)) {

                listCopy.add(bean);

            }

        }


查看完整回答
反对 回复 2019-04-16
?
狐的传说

TA贡献1804条经验 获得超3个赞

直接Hashset,楼上的太复杂了!!!!


查看完整回答
反对 回复 2019-04-16
  • 4 回答
  • 0 关注
  • 351 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号