gpt4 book ai didi

java - HashSet 与 ArrayList

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:06:43 24 4
gpt4 key购买 nike

所以我有一个自定义类 Class,它将包含一组另一个自定义类 Students。所以它看起来像这样:

public class Class {
private Set<Student> students;

// other methods
}

现在我将在学生集中添加和删除许多学生,我还将更改学生集中已有学生的许多私有(private)字段。

问题:我应该使用什么数据结构来最好地实现它?由于我将更改 set student 中 Student 对象的属性(从而更改哈希码),我应该改用 ArrayList 吗?

最佳答案

当谈到 ArrayListHashSet 的行为时,它们是完全不同的类。

数组列表

  • 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/

24 4 0