这是一个非常常见的问题,但我找不到这个部分:
说我有这个数组列表:
List<MyDataClass> arrayList = new List<MyDataClass>;
MyDataClass{
String name;
String age;
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要age在in 的基础上找到重复项MyDataClass并删除它们.如何使用像这里描述的HashSet这样的东西呢?
我想,我们需要equals在MyDataClass中覆盖?
aio*_*obe 16
我建议你覆盖两者 equals和hashCode(HashSet依赖于两者!)
要删除重复项,您只需HashSet使用ArrayList作为参数创建一个new ,然后清除ArrayList并放回存储在其中的元素HashSet.
class MyDataClass {
String name;
String age;
@Override
public int hashCode() {
return name.hashCode() ^ age.hashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MyDataClass))
return false;
MyDataClass mdc = (MyDataClass) obj;
return mdc.name.equals(name) && mdc.age.equals(age);
}
}
Run Code Online (Sandbox Code Playgroud)
然后呢
List<MyDataClass> arrayList = new ArrayList<MyDataClass>();
Set<MyDataClass> uniqueElements = new HashSet<MyDataClass>(arrayList);
arrayList.clear();
arrayList.addAll(uniqueElements);
Run Code Online (Sandbox Code Playgroud)
但是,如果我没有这样做的奢侈呢?
然后,我建议你做一些装饰-类的确实提供了这些方法.
class MyDataClassDecorator {
MyDataClass mdc;
public MyDataClassDecorator(MyDataClass mdc) {
this.mdc = mdc;
}
@Override
public int hashCode() {
return mdc.name.hashCode() ^ mdc.age.hashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MyDataClassDecorator))
return false;
MyDataClassDecorator mdcd = (MyDataClassDecorator) obj;
return mdcd.mdc.name.equals(mdc.name) && mdcd.mdc.age.equals(mdc.age);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17568 次 |
| 最近记录: |