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==