收藏打破

Rol*_*all 1 java collections comparable

从这个链接

名称对象是不可变的.在所有其他条件相同的情况下,不可变类型是可行的方法,特别是对于将在集合中用作元素或在地图中用作键的对象.如果您在集合中修改元素或键,这些集合将会中断.我们怎么知道"Name"这个类是不可变的?(上面提到的链接中可见类名)

它们实际上意味着什么"如果你修改它们的元素,那么这些集合会破裂?"

提前致谢.

SJu*_*n76 5

因为使用可变类,您可以更改基于它们在集合中组织/排序的属性,并且持有者类不会知道它.

认为你可以这样做:

 public class Name implements Comparable<Name> {

    private String firstname = null
    // getters and setters

    public int compareTo(Name name) {
       // Compare based in firstName
    }
 }
Run Code Online (Sandbox Code Playgroud)

然后:

 Name name1 = new Name("John");
 Name name2 = new Name("Mike");
 SortedSet<Name> set = new TreeSet<Name>();
 set.add(name1);
 set.add(name2);
 name1.setFirstName("Ralph");
Run Code Online (Sandbox Code Playgroud)

现在,是set订购还是不订购?

以类似的方式,影响hashCode实例的更改中断HashMap和类似,因为在插入/检索对象时执行这些类的第一个是使用bucket基于该值的特定类.