2 baidu 34387489 baidu_34387489 于 2016.03.23 11:41 提问

Arraylist 去重复时编写去重方法没有运行找不到错误在哪?求大神帮看一下

class Person {
private String name;
private int age;
Person (String name,int age) {
this.name = name;
this.age =age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public boolean equals(Object obj) {
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Person("tom",1));
al.add(new Person("jack",8));
al.add(new Person("jack",8));
al.add(new Person("aaron",5));
al.add(new Person("aaron",5));
al.add(new Person("lisi",8));

    al = singleName(al);

    for(Iterator<Object> it =al.iterator(); it.hasNext();) {
        Person p = (Person)it.next();
        System.out.println(p.getName()+"----"+p.getAge());
    }       
}
public static ArrayList<Object> singleName(ArrayList<Object> al) {
    ArrayList <Object> newAl= new ArrayList<Object>();
    Iterator <Object> it = al.iterator();
    while  (it.hasNext()) {
        Object obj = it.next();
        if(!newAl.contains(obj));
            newAl.add(obj);     
    }
    return newAl;   
}

}

3个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.23 11:48

singleName这个方法中,if条件后面的分号去掉,因为你加了分号,就是空语句了,后面的代码就不是if语句的内容了。
修正如下:

    public static ArrayList<Object> singleName(ArrayList<Object> al) {
        ArrayList<Object> newAl = new ArrayList<Object>();
        Iterator<Object> it = al.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            if (!newAl.contains(obj)){
                newAl.add(obj);
            }
        }
        return newAl;
    }

这个问题很容易发现,就是格式化下代码,就能看到多出一个分号了;
这个问题也很容易规避,就是编写代码遵循一定的规范,使用if语句时一定用{}括起来,即使只有一条语句,也要括起来,既是保持代码可读性的良好习惯,也就能规避你这个手误输入的分号了。

qigemingzitt
qigemingzitt   2016.03.23 11:53

public static ArrayList singleName(ArrayList al) {
ArrayList newAl= new ArrayList();
Iterator it = al.iterator();
while (it.hasNext()) {
Object obj = it.next();
if(!newAl.contains(obj)); //把这行的 ; 号去掉
newAl.add(obj);

}
return newAl;

}

Royal_lr
Royal_lr   Ds   Rxr 2016.03.23 15:38

用set集合就可以不用去重了,,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
集合框架---ArrayList中去除重复的方法
去除集合中字符串的重复值 案例一:利去除ArrayList中重复字符串元素方式 //利用ArrayList集合去除集合中重复的字符串 public static void main(String[] args){ ArrayList list = new Arraylist(); list.add("她说"); list.add("晴天"); list.add("晴天
Java实现ArrayList去重复值
方法一:循环元素删除  // 删除ArrayList中重复元素 public static void removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j >
ArrayList中去除重复数据,以及去除重复的自定义对象
去掉重复数据思路:创建一个新集合,遍历旧的集合,不包含就添加 private ArrayList getList(List arr) {         List list = new ArrayList();         Iterator it = arr.iterator();         while (it.hasNext()) {             Object o
JAVA 中ArrayList如何去除重复项方法。
Java 中Collection实现类ArrayList如何去除重复项。以下列出了几种方法,以不同的方面去考虑。 (1)通过循环剔除重复项:使用双向的for循环,依次取出集合中元素进行比较。【基本类型。自定义类型自定义比较方法】 public static void removeDuplicate(List list) { for ( int i = 0 ; i < list.s
ArrayList去重复以及遍历
方式1 import java.util.ArrayList; /** * ArrayList 是list的子类 所以:数据有序,可重复 需求:请在ArrayList里面存储多个字符串 ,并想办法去掉重复的元素 * * @author ycf * */ public class ArrayListTest { public static void main(String[] ar
ArrayList去除重复数据,排序
去除重复数据包括保持顺序和不保持顺序两个方法注意:因为借用了HashSet,所以判断重复需要重写 T 的hashCode()和equals()方法public class ListTools { /** * 删除重复元素,保持顺序 * @param list */ public static <T> void removeDuplicateWithOrde
两个ArrayList合并,并且去掉重复数据的算法
import java.util.*; public class Test { public static void main(String[] args){   List l1=new ArrayList();   l1.add(1);l1.add(2);l1.add(3);   l1.add(4);l1.add(5);l1.add(6);   List l2=new Array
【Java】为ArrayList去重
ArrayList没有封装好的去重方法,比如对于一个[2, 5, 2, 3, 2, 4]的ArrayList,我要去除其中的重复的元素, 我也不想把语句也这么长,也不想用for循环的方法去重,那么可以先考虑把ArrayList转化为一个临时的HashSet,再把这个临时的HashSet转化回ArrayList, 因为HashSet里面的元素是不可重复的嘛!至于什么是ArrayList与Hash
ArrayList中元素去重问题
如题所示,如果一个ArrayList中包含多个重复元素,该如何去重呢? 思路一以及实现: 声明2个ArrayList,分别为listA与listB ,listA为待去重list ,listB 保存去重之后数据 。遍历listA ,然后判断listB中是否包含各个元素,若不包含,把吃元素加入到listB中。 代码实现: 辅助实体类:Student
Java中ArrayList的去重复及排序
去重复思想:首先创建一个新都集合,通过遍历旧的集合,用旧集合的元素判断新集合当中是否有该元素,没有就添加到新集合当中。字符类型元素去重复package com.lj.test;import java.util.ArrayList;public class ArrayListDemo { public static void main(String[] args) { Array