Изменение значений в HashSet

прочитал этот вопрос:Изменение элементов в наборе изменяетравен семантика

Тем не менее, я нене знаю, как решить проблему, которую я могуизменить элемент в HashSet и удалить его позже.

У меня есть пример исходного кода:

public static void main(String[] args) {
    TestClass testElement = new TestClass("1");
    Set set = new HashSet();
    set.add(testElement);
    printIt(testElement, set, "First Set");
    testElement.setS1("asdf");
    printIt(testElement, set, "Set after changing value");
    set.remove(testElement);
    printIt(testElement, set, "Set after trying to remove value");
    testElement.setS1("1");
    printIt(testElement, set, "Set after changing value back");
    set.remove(testElement);
    printIt(testElement, set, "Set removing value");
}

private static void printIt(TestClass hullo, Set set, String message) {
    System.out.println(message + " (hashCode is " + hullo.hashCode() + "):");
    for (TestClass testClass : set) {
        System.out.println("    " + testClass.toString());
        System.out.println("        HashCode: " + testClass.hashCode());
        System.out.println("        Element is equal: " + hullo.equals(testClass));
    }
}

Где TestClass - это просто POJO, который содержит переменную (плюс getter & setter) и имеет hashcode () и equals ().

Был запрос показать методы equals () и hashcode (). Они автоматически генерируются затмением:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((s1 == null) ? 0 : s1.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    TestClass other = (TestClass) obj;
    if (s1 == null) {
        if (other.s1 != null)
            return false;
    } else if (!s1.equals(other.s1))
        return false;
    return true;
}

Результат следующий:

First Set (hashCode is 80):
    TestClass [s1=1]
        HashCode: 80
        Element is equal: true
Set after changing value (hashCode is 3003475):
    TestClass [s1=asdf]
        HashCode: 3003475
        Element is equal: true
Set after trying to remove value (hashCode is 3003475):
    TestClass [s1=asdf]
        HashCode: 3003475
        Element is equal: true
Set after changing value back (hashCode is 80):
    TestClass [s1=1]
        HashCode: 80
        Element is equal: true
Set removing value (hashCode is 80):

Когда хеш-код изменился, я могуt удалить значение из HashSet. Как всвязанный вопрос, Я понимаюЗачем это так, но я нене знаю, как удалить измененное значение. Есть ли возможность сделать это?

Ответы на вопрос(3)

Ваш ответ на вопрос