import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.TreeSet;
class Ideone {
public static void main
(String[] args
) { Foo fooOne = Foo.of(1);
Foo fooTwo = Foo.of(2);
Foo fooThree = Foo.of(3);
TreeSet<Foo> set = new TreeSet<>();
set.
addAll(List.
of(fooOne, fooTwo, fooThree
)); System.
out.
println(set.
contains(fooOne
)); fooOne.setValue(4);
System.
out.
println(set.
contains(fooOne
)); System.
out.
println(new ArrayList
<>(set
).
contains(fooOne
)); }
}
class Foo implements Comparable<Foo> {
private int value;
private Foo(int value) {
this.setValue(value);
}
public static Foo of(int value) {
return new Foo(value);
}
public int getValue() {
return value;
}
public Foo setValue(int value) {
this.value = value;
return this;
}
@Override
public boolean equals
(Object o
) { if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Foo foo = (Foo) o;
return getValue() == foo.getValue();
}
@Override
public int hashCode() {
return Objects.hash(value);
}
@Override
public int compareTo(Foo that) {
return getValue() - that.getValue();
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwppbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CgpjbGFzcyBJZGVvbmUgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIEZvbyBmb29PbmUgPSBGb28ub2YoMSk7CiAgICAgICAgRm9vIGZvb1R3byA9IEZvby5vZigyKTsKICAgICAgICBGb28gZm9vVGhyZWUgPSBGb28ub2YoMyk7CiAgICAgICAgVHJlZVNldDxGb28+IHNldCA9IG5ldyBUcmVlU2V0PD4oKTsKICAgICAgICBzZXQuYWRkQWxsKExpc3Qub2YoZm9vT25lLCBmb29Ud28sIGZvb1RocmVlKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNldC5jb250YWlucyhmb29PbmUpKTsKICAgICAgICBmb29PbmUuc2V0VmFsdWUoNCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNldC5jb250YWlucyhmb29PbmUpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IEFycmF5TGlzdDw+KHNldCkuY29udGFpbnMoZm9vT25lKSk7CiAgICB9Cn0KCmNsYXNzIEZvbyBpbXBsZW1lbnRzIENvbXBhcmFibGU8Rm9vPiB7CiAgICBwcml2YXRlIGludCB2YWx1ZTsKCiAgICBwcml2YXRlIEZvbyhpbnQgdmFsdWUpIHsKICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIEZvbyBvZihpbnQgdmFsdWUpIHsKICAgICAgICByZXR1cm4gbmV3IEZvbyh2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGludCBnZXRWYWx1ZSgpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgcHVibGljIEZvbyBzZXRWYWx1ZShpbnQgdmFsdWUpIHsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKICAgICAgICBpZiAodGhpcyA9PSBvKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAobyA9PSBudWxsIHx8IGdldENsYXNzKCkgIT0gby5nZXRDbGFzcygpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgRm9vIGZvbyA9IChGb28pIG87CiAgICAgICAgcmV0dXJuIGdldFZhbHVlKCkgPT0gZm9vLmdldFZhbHVlKCk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgIHJldHVybiBPYmplY3RzLmhhc2godmFsdWUpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIGludCBjb21wYXJlVG8oRm9vIHRoYXQpIHsKICAgICAgICByZXR1cm4gZ2V0VmFsdWUoKSAtIHRoYXQuZ2V0VmFsdWUoKTsKICAgIH0KfQ==