java - list去除重复项,求教大神,谢谢
伊谢尔伦
伊谢尔伦 2017-04-17 17:09:02
[Java讨论组]
  1. 遇到的的问题
    我建立了一个list,泛型是Bean,Bean中的三个对象都是String类型,如何去除重复项得到这样的结果:

数电, 75, 5
线代, 33, 3

2 相关代码

ArrayList list = new ArrayList();
            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 listCopy = new ArrayList();
for(Bean b:list){
            if (!listCopy.contains(b)) {
                listCopy.add(b);
            }
        }
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
迷茫
 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方法具有很特殊的含义,需慎用。

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

阿神

重写equal hash

伊谢尔伦

这是我的代码,运行通过:
重写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);
            }
        }
黄舟

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号