所以我有一个自定义类 Class,它将包含一组另一个自定义类 Students。所以它看起来像这样:
public class Class {
private Set<Student> students;
// other methods
}
现在我将在学生集中添加和删除许多学生,我还将更改学生集中已有学生的许多私有(private)字段。
问题:我应该使用什么数据结构来最好地实现它?由于我将更改 set student 中 Student 对象的属性(从而更改哈希码),我应该改用 ArrayList 吗?
最佳答案
当谈到 ArrayList
和 HashSet
的行为时,它们是完全不同的类。
数组列表
ArrayList
不验证重复项。get()
是O(1)
contains()
是O(n)
但您可以完全控制条目的顺序。get add contains next remove(0) iterator.remove ArrayList O(1) O(1) O(n) O(1) O(1) O(1)
不是线程安全的,要使其成为线程安全的,您必须使用
Collections.synchronizedList(...)
哈希集
HashSet
确保没有重复项。为您提供一个
O(1)
contains()
方法但不保留顺序。add contains next notes HashSet O(1) O(1) O(h/n) h is the table
- 不是线程安全的,要使其成为线程安全的,您必须使用
Collections.synchronizedSet(...)
关于java - HashSet 与 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985029/