一个网易java的面试题
在java中,集合Set中的元素内容可以改变吗?为什么?
网易内推时候问到了这个问题,记得当时网易实习生笔试题也有这个问题,现在还不是很清楚这个问题。 有没有大神解答下??谢谢。。
网易内推时候问到了这个问题,记得当时网易实习生笔试题也有这个问题,现在还不是很清楚这个问题。 有没有大神解答下??谢谢。。
下面是我的测试代码:我感觉可以改变啊。但是既然问了这个面试题,感觉应该是不可以改变的。而且,set集合中没有get方法。只能通过遍历查找元素吧??
import java.util.*; class Student { int name; public int getName() { return name; } public void setName(int name) { this.name = name; } Student(int name) { this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + name; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (name != other.name) return false; return true; } } public class TestSet { public static void main(String[] args) { Student s1 = new Student(12); Student s2 = new Student(120); HashSet<Student> set = new HashSet<>(); set.add(s1); set.add(s2); s1.setName(22222); Student s3 = new Student(12); set.add(s3); System.out.println(set.size()); Iterator<Student> iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next().getName()); } } }
运行结果如下:
3 120 22222 12