gpt4 book ai didi

java - 如何根据ename删除Employee的arrayList中的重复项

转载 作者:行者123 更新时间:2023-11-30 10:59:36 24 4
gpt4 key购买 nike

如何根据ename删除Employee的arrayList中的重复项下面是代码。

package collection;

import java.util.ArrayList;

public class Employee extends ArrayList<Employee> {

int empno;
String ename;

public boolean add(Employee e) {
// TODO Auto-generated method stub

Employee e1=(Employee)e;
if(e1.getEname().equals(this.getEname()))
{
return false;
}

return super.add(e);
}

public int getEmpno() {
return empno;
}
/*public void setEmpno(int empno) {
this.empno = empno;
}
public void setEname(String ename) {
this.ename = ename;
}*/

public String getEname() {
return ename;
}

@Override
public String toString() {
return "Employee [empno=" + empno + ", ename=" + ename + "]";
}

public Employee(int empno, String ename) {
super();
this.empno = empno;
this.ename = ename;
}



}

最佳答案

extends ArrayList<Employee>复制粘贴错误?如果你删除它,你可以使用将所有员工放在 java.util.Set 中- 根据定义不允许重复。

Java 8 语法是:

Set<Employee> employeeSet = new TreeSet<>((e1, e2) 
-> e1.getEname().compareTo(e2.getEname());
employeeSet.addAll(originalEmployeeList);
List<Employee> noDuplicatesEmployeeList = new ArrayList<>(employeeSet);

确保getEname()不返回 null .

如果不允许使用除列表以外的任何集合,则必须使用嵌套迭代来删除重复项。这在 O(n^2) 中运行.

for (Employee e1 : l) {
for (Iterator<Employee > i = l.iterator(); i.hasNext();) {
Employee e2 = i.next();
if (e1 != e2 && e1.getEname().equals(e2.getEname())) {
i.remove();
}
}
}

或者 - 如果您被允许重新排序 - 您可以对列表进行排序并在另一次迭代中删除重复项。这在 O(n*log(n))) 中运行.

l.sort((e1, e2) -> e1.getEname().compareTo(e2.getEname());
String cmpEname = null;
for (Iterator<String> i = l.iterator(); i.hasNext();) {
Employee e = i.next();
if (e.getEname().equals(cmpEname)) {
i.remove();
} else {
cmpEname = e.getEname();
}
}

另请注意,您的问题是如何删除重复项,这与创建不允许重复项的列表不同。您应该与面试官讨论每种方法的好处。

关于java - 如何根据ename删除Employee的arrayList中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com