HashSet vs. ArrayList

arraylist, collections, hashset, java, set

Solution

What data structure should I use to best implement this? Since I will be changing the property of the Student objects in set student (thereby changing the hashcodes) should I use an ArrayList instead?

If the hashcodes for the set elements are liable to change, then you should NOT be using a `HashSet`. (If you do, the data structure will break, and elements in the set are liable to go missing.)

But I doubt you should be using `ArrayList` either, because if `hashcode()` is sensitive to changes to the object, then `equals(Object)` will most likely be too. And that means that `contains(...)` and similar methods won't be able to find objects.

I think you should be using a `Map` type, and using a "student identifier" as the key.

(You could also override `hashcode` and `equals` so that equality means that two objects have the same id. But that makes `equals(Object)` useless for other purposes.)

Problem

So I have a custom class Class that will have a set of another custom class Students. So it will look something like this: ``` public class Class { private Set<Student> students; // other methods } ``` Now I will be adding and removing many students to the set students and i will also be changing many of the private fields of a student already in the set of students. QUESTION: What data structure should I use to best implement this? Since I will be changing the property of the Student objects in set student (thereby changing the hashcodes) should I use an ArrayList instead?

Original source

Related problems