如何避免在对象的arraylist中添加重复条目

时间:2015-08-06 03:29:25

标签: java arraylist

我有一个班级'员工'它有属性(指定,DoB,员工-I' d,姓名,薪水)。

现在通过以下功能我添加' n' ArrayList' abc'

中的员工对象

但是我需要以这样的方式修改它:如果最终用户尝试添加重复的员工(如果两个员工的名称相同则应该被视为重复),则不允许用户这样做。 ..

我怎么能这样做......我想可能使用Map Interface ......但不知道,如何实现

public void addEmployees(int n, ArrayList<Employee> abc)    /* 'n' is the number of employees to be added */
{
    Scanner sc=new Scanner(System.in);
    Employee[] obj = new Employee[n];
    for(int i=0;i<n;i++)
    {
            System.out.println("Enter Employee name:");
            String nm=sc.next();
            System.out.println("Enter designation:");
            String des = sc.next();
            System.out.println("Enter employeeI-D:");
            int eId = sc.nextInt();
            System.out.println("Enter salary:");
            double sl = sc.nextDouble();
            System.out.println("Enter date-of-birth:");
            String dt=sc.next();
            obj[i]=new Employee(des,dt,eId,nm,sl);
            abc.add(obj[i]);
    }
}

2 个答案:

答案 0 :(得分:0)

ArrayList(或任何类型的List)是此问题的次优数据结构,因为元素查找需要O(n)时间n是列表的大小。基本上你需要浏览整个列表并检查该元素是否存在:

public boolean contains(List<Employee> employees, Employee emp) {
    for(Employee el : employees) {
        if(el.equals(emp)) { // override equals() and hashCode() in Employee 
                             // or use a cutom equals(Employee, Employee) method
            return true;
        }
    }
}

或者使用Java 8语法:

abc.stream().anyMatch(emp -> emp.equals(newEmployee));

如果您可以将该列表更改为Set,则可以使用contains(Element)方法检查Set是否已包含给定元素。请注意,此方法使用equals方法进行检查!

答案 1 :(得分:0)

为了能够检查重复,我们可以将名称存储在一个集合中(设置&lt;字符串&gt;名称),并在每次将员工添加到列表之前进行检查:

Employee[] obj = new Employee[n];
Set<String> names = new HashSet<String>();
...........
...........
if (!names.contains(nm) {
    abc.add(obj[i]);
    names.add(nm);
}