将 List<String> 转换为 HashSet<String> 的好处 Java
Benefits of Converting List<String> to HashSet<String> Java
所以我有一个字符串列表,每次调用服务时都需要实例化一次。是否值得将 List<String>
转换为 HashSet<String>
然后检查字符串是否在 hashSet 中?
例如
HashSet<String> services = new HashSet<String>((List<String>) services);
我知道检查列表中的字符串是 O(n),检查 hashSet 中的字符串是 O(1)。我认为转换可能是 O(n).
如果我没有多次搜索列表,重铸是否有性能优势?
转换没有任何好处。您的 Bio O 性能分析是正确的。
List
和 Set
不是一回事:
- 列表已排序。一套不是。
- 一个列表可以多次包含同一个对象。该集合不允许重复。
所以您需要问自己的第一个问题是:
- 我需要在列表中重复吗?
- 我需要列表中的特殊订单吗?
如果两个问题的答案是否定的,最好使用 HashSet 而不是 List。这将保证更好的检索元素的性能。
如果您不能将 List 更改为 HashSet 但您需要复制数据结构,则有必要更好地检查您的代码以查看集合创建时间是否比检索元素所获得的时间慢
所以我有一个字符串列表,每次调用服务时都需要实例化一次。是否值得将 List<String>
转换为 HashSet<String>
然后检查字符串是否在 hashSet 中?
例如
HashSet<String> services = new HashSet<String>((List<String>) services);
我知道检查列表中的字符串是 O(n),检查 hashSet 中的字符串是 O(1)。我认为转换可能是 O(n).
如果我没有多次搜索列表,重铸是否有性能优势?
转换没有任何好处。您的 Bio O 性能分析是正确的。
List
和 Set
不是一回事:
- 列表已排序。一套不是。
- 一个列表可以多次包含同一个对象。该集合不允许重复。
所以您需要问自己的第一个问题是:
- 我需要在列表中重复吗?
- 我需要列表中的特殊订单吗?
如果两个问题的答案是否定的,最好使用 HashSet 而不是 List。这将保证更好的检索元素的性能。
如果您不能将 List 更改为 HashSet 但您需要复制数据结构,则有必要更好地检查您的代码以查看集合创建时间是否比检索元素所获得的时间慢