当前位置: 首页 > 面试题库 >

HashSet vs ArrayList包含性能

东方新霁
2023-03-14
问题内容

在处理大量数据时,我经常发现自己在做以下事情:

HashSet<String> set = new HashSet<String> ();
//Adding elements to the set
ArrayList<String> list = new ArrayList<String> (set);

类似于“倾销”列表中的集合内容。我通常这样做是因为添加的元素通常包含要删除的重复项,这似乎是删除它们的一种简便方法。

考虑到这个目标(避免重复),我也可以这样写:

ArrayList<String> list = new ArrayList<String> ();
// Processing here
if (! list.contains(element)) list.add(element);
//More processing here

因此,无需将集“转储”到列表中。但是,在插入每个元素之前,我会做一个小检查(我假设HashSet也是如此)

这两种可能性中的任何一种是否明显更有效?


问题答案:

集合将提供更好的性能(O(n)O(n^2)列表相比),这是正常的,因为集合成员资格(contains操作)是集合的主要 目的

包含HashSetO(1)O(n)列表进行比较,因此,如果您经常需要运行,则永远不要使用列表contains



 类似资料:
  • 如何在Gradle中包含属性文件? 例如,在Ant中,我可以执行以下操作:

  • 将属性包含到模型中意味着 EF 将获得该属性的元数据,并且将尝试从数据库读取该属性的值或将该属性的值写入到数据库。 惯例 按照惯例,具有 getter 和 setter 访问器的公共(public)属性将被包含在模型中。 数据注解 可以使用数据注解将属性从模型中排除。 public class Blog { public int BlogId { get; set; } publi

  • 正在寻找旧JSF页面的解决方案。我试图使用contains方法根据另一列是否包含单词red box来呈现组合框。 这一个工作和组合框被禁用。 但是,我也想在值不包含红色框时渲染它们,但随后将启用combox。 这是行不通的。 因此,我如何测试的任何想法都不包含特定的单词。我还尝试了choose test when,但由于第一个表。col4值只是一个空字符串。 有什么想法吗?谢谢。

  • 问题内容: 我有以下问题。我需要获取UI属性: 返回字符串,并且有效。但是,如果我遍历密钥集,则永远不会得到密钥。有谁知道为什么会这样吗?我得到了三种不同的方式(,和),但这些工作的任何人。 编辑 :我也找到了JFileChooser类的属性列表,其中包含一些不会出现在键集中的属性。问题是:如何以编程方式获取所有这些属性? 编辑 :代码示例: 此代码返回打印这些属性。键不出现在输出中。 问题答案:

  • 本文向大家介绍window.location 对象所包含的属性,包括了window.location 对象所包含的属性的使用技巧和注意事项,需要的朋友参考一下 hash//从井号 (#) 开始的 URL(锚) host//主机名和当前 URL 的端口号 hostname//当前 URL 的主机名 href//完整的 URL pathname//当前 URL 的路径部分 port//当前 URL 的

  • Includes 允许你静态包含一段Jade, 或者别的存放在单个文件中的东西比如css, html。 非常常见的例子是包含头部和页脚。 假设我们有一个下面目录结构的文件夹: ./layout.jade ./includes/ ./head.jade ./tail.jade 下面是 layout.jade 的内容: html include includes/head