java – 删除Custom对象的ArrayList中的重复项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 删除Custom对象的ArrayList中的重复项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2103字,纯文字阅读大概需要4分钟。
内容图文
![java – 删除Custom对象的ArrayList中的重复项](/upload/InfoBanner/zyjiaocheng/733/f23b900137404daa9dd904953d121cea.jpg)
我正在尝试从我的阵列中删除重复的对象.
我的自定义由两个双重组成:x和y.
我想要做的是删除重复((x&& y)==(x1&& y1))如果x == x1我想保留具有更高y的对象.
ArrayList<MyObject> list = [x(0),y(0)], [x(0),y(0)], [x(0.5),y(0.5], [x(0.5),y(0.6)], [x(1),y(1)];
ArrayList<MyObject> results = [x(0),y(0)], [x(0.5),y(0.6)], [x(1),y(1)];
我试图实现equals方法,但我不知道如何使用它:
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof MyObject)) {
return false;
}
return (this.x == ((MyObject)obj).x);
}
始终使用Collections.sort by x对list进行排序.
谢谢大家.
解决方法:
鉴于MyObject是这样的:
class MyObject {
private final double x;
private final double y;
public MyObject(double x, double y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObject myObject = (MyObject) o;
if (Double.compare(myObject.x, x) != 0) return false;
if (Double.compare(myObject.y, y) != 0) return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
temp = Double.doubleToLongBits(x);
result = (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(y);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
}
您可以实现一个唯一的方法,该方法仅返回包含唯一元素的列表:
private List<MyObject> unique(List<MyObject> list) {
List<MyObject> uniqueList = new ArrayList<>();
Set<MyObject> uniqueSet = new HashSet<>();
for (MyObject obj : list) {
if (uniqueSet.add(obj)) {
uniqueList.add(obj);
}
}
return uniqueList;
}
并进行单元测试以验证其是否有效:
@Test
public void removeDups() {
List<MyObject> list = Arrays.asList(new MyObject(0, 0), new MyObject(0, 0), new MyObject(0.5, 0.5), new MyObject(0.5, 0.6), new MyObject(1, 1));
List<MyObject> results = Arrays.asList(new MyObject(0, 0), new MyObject(0.5, 0.5), new MyObject(0.5, 0.6), new MyObject(1, 1));
assertEquals(results, unique(list));
}
注意:为了实现这一点,实现equals和hashCode很重要,
因为使用了哈希映射.但是你应该总是在自定义类中执行此操作:提供适当的equals和hashCode实现.顺便说一下,我没有写那些equals和hashCode方法.我让我的IDE(IntelliJ)从类的字段x和y自动生成它们.
内容总结
以上是互联网集市为您收集整理的java – 删除Custom对象的ArrayList中的重复项全部内容,希望文章能够帮你解决java – 删除Custom对象的ArrayList中的重复项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。