替换哈希集Java成员[英] Replacing a HashSet Java member

问题描述

我有一组结构.我没有重复,但是当我打电话时: set.add(element) - >并且已经有精确的元素,我希望将旧的替换.

import java.io.*;

public class WordInfo implements Serializable {
    File plik;
    Integer wystapienia;

    public WordInfo(File plik, Integer wystapienia) {
        this.plik = plik;
        this.wystapienia = wystapienia;
    }

    public String toString() {
    //  if (plik.getAbsolutePath().contains("src") && wystapienia != 0)
            return plik.getAbsolutePath() + "\tWYSTAPIEN " + wystapienia;
    //  return "";
    }
    @Override
    public boolean equals(Object obj) {
        if(this == obj) return true;
        if(!(obj instanceof WordInfo)) return false;
        return this.plik.equals(((WordInfo) obj).plik);
    }

    @Override
    public int hashCode() {        
        return this.plik.hashCode();
    }
}

推荐答案

在每次添加之前删除:

 someSet.remove(myObject);
 someSet.add(myObject);

删除将删除与MyObject等于的任何对象.另外,您可以检查添加结果:

 if(!someSet.add(myObject)) {
     someSet.remove(myObject);
     someSet.add(myObject);
 }

更有效的效率取决于您发生冲突的频率.如果它们很少见,则第二种形式通常只执行一个操作,但是当发生碰撞时,它会执行三个操作.第一个表格总是做两个.

其他推荐答案

如果该集合已经包含了您要添加的元素的元素,则不会添加新元素,也不会替换现有元素.为了确保添加新元素,只需首先将其从集合中删除:

set.remove(aWordInfo);
set.add(aWordInfo);

其他推荐答案

我正在处理一个问题,然后我想用另一组对象替换/覆盖某些对象.

在我的情况下,我最终要做的就是创建一个新集合,然后将覆盖率首先放置,然后再添加当前对象.之所以起作用,是因为添加新对象时不会替换任何现有对象.

如果有:

Set<WordInfo> currentInfo;
Set<WorldInfo> overrides;

而不是:

for each override, replace the object in current info

我做到了:

Set<WordInfo> updated = new HashSet<>();
updated.addAll(overrides);
updated.addAll(currentInfo);

本文地址:https://www.itbaoku.cn/post/978724.html