问题标签 [linkedhashset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
15013 浏览

java - Hashset、Treeset 和 LinkedHashset、Hashmap 之间的主要区别是什么以及它在 Java 中是如何工作的?

我只是明白 LinkedHashSet 在插入时不允许重复元素。但是,我不明白 Hashset 在 Hava 中是如何工作的?我知道在 Hashset 中使用了 Hashtable,因此哈希表用于存储元素,这里也不允许重复元素。然后,Treeset 也类似于 Hashset,它也不允许重复的条目,因此可以看到唯一的元素,并且它遵循升序。

我对 HashMap 还有一个疑问 - Hashmap 不维持秩序。它可能有一个空键和多个空值。我只是不明白这一点,这实际上是什么意思?有什么实际的例子吗?

我知道一点,Hashmap 曾经基于此工作 - 用于放入存储桶的键和值也存储桶具有唯一编号。这样,就可以从桶中识别并获取键和值。当我将键/值对放入其中标识符是键的哈希码的桶中时。

例如:键的哈希码是101,所以它存储在桶101中。一个桶可以存储多个键和值对。假设 Object1 是“A”,object2 是“A”,object3 是“B”,那么它具有相同的 Hash 码。因此,它通过在同一个桶中共享相同的 Hashcode 来存储不同的对象。我的疑问是,具有相同哈希码的对象应该相等,不同的对象应该有不同的哈希码?

这是使用 HashSet 的程序:

输出是,

我的疑问是,为什么“a”插入在“B”和“C”之间。

现在,我正在使用 LinkedHashSet 所以,

我只是明白,它遵循插入顺序并且避免重复元素。所以输出是,

现在,使用树集:

在这里,我只是明白- Treeset 遵循升序。

那么我的疑问是,Hashset 在 Java 中是如何工作的?而且我知道 LinkedHashset 遵循双链表。如果它使用双向链表,那么它如何存储元素?双向链表是什么意思,它是如何工作的?那么这三个Hashset,Treeset,LinkedHashset在Java中会在哪里使用,哪一个在Java中性能更好呢?

0 投票
5 回答
3358 浏览

java - 如何替换 LinkedHashSet 中的特定元素?

使用 ArrayList 我会做类似的事情

有没有一种简单的方法可以为 LinkedHashSet 实现这一目标?

0 投票
2 回答
640 浏览

java - 在 jcombobox 中使用linkedhashset?

我正在尝试使用 MVC 设计模式创建一个程序。在我的模型中,我创建了一组字符串。字符串只是大约 45 个语言环境的集合。

在我看来,我正在创建一个 JComboBox。我想按照它们的顺序使用 45 个唯一语言环境的集合,所以我使用的是 LinkedHashSet。

我在尝试将语言环境传递给 JComboBox 时遇到了麻烦,并且有些事情我不确定。

编辑:我想知道的主要事情是如何将我的 Set 放入我的 JComboBox。以下是我在写这篇文章时想到的其他一些问题。如果您愿意,请随时回答他们!

  1. 我应该使用 Set,它是正确的集合吗?
  2. 我应该使用 LinkedHashSet,它是正确的实现吗?
  3. 我是否正确使用了组合框?
  4. 有什么建议等吗?
  5. 我对数据结构不太了解,有什么好的资源吗?

这是我已经在使用的代码:

看法

模型

0 投票
1 回答
273 浏览

java - java - 如何在不重新排序的情况下从列表中删除重复项?

我正在尝试使用 Set Interface 从我的 String 类型的 List 对象中删除重复项,但我面临的问题是它还会重新排序我的列表,这是我不想要的。我想保留列表的顺序并仅删除重复项?

0 投票
3 回答
102 浏览

java - 那是什么在方法签名中?

我从这里阅读了关于 Set 接口的内容,下面的代码是一个从集合中删除重复项的通用方法。

我的问题是**< E>**在 static before 之后放置的是什么Set<E>

我的意思是这还 Set<E>不够吗?为什么<E>有两次?

0 投票
2 回答
2413 浏览

java - LinkedHashSet 不删除重复项

我正在尝试创建一个搜索算法,将坐标对存储在一个名为 HashSquareSpec 的包装类中。为了避免重复并保持插入顺序,我将每个 HashSquareSpec 插入到 LinkedHashSet 中。即使我重写了 equals() 方法和 hashCode() 方法,LinkedHashSet 仍然接受具有相同坐标对的两个 HashSquareSpec 对象。

HashSquare 类

和 HashSquareSpec 的超类

尽管有许多不同的 hashCode 变体和 Eclipse equals 和 hashCode 生成,firedShots 数据结构仍然接受重复。我的代码有什么问题?

0 投票
2 回答
375 浏览

java - LinkedHashSet 和 HashSet 的迭代器在源代码的什么地方实现了不同的行为?

我调查LinkedHashSetHashSet 收藏。

我写了一个小程序:

输出:

当我看到这种行为时,我开始研究集合的源代码。

我注意到 LinkedHashSet 和 HashSet 都使用

共同toString() 实现——从AbstractCollection

常见iterator()HashSet

是什么解释了我的代码LinkedHashSetHashSet在我的代码中的不同输出?

伊万·巴巴宁回答后更新

对于LinkedHashSetHashSet调用不同的构造函数:

对于 LinkedHashSet-

对于 HashSet-

HashMap和 -的迭代器LinkedHasMap(来自HashSet

研究keySet()方法:

HashMap

LinkedHashMap不能特别实现keySet方法和使用HashMap实现。

map.keySet().iterator() is

map.keySet()返回相同的类型HashMapLinkedHashMap因此调用相同的newEntryIterator()方法。

是错误的说法吗?

用于 EJP 更新

我导航到HashSet#iterator

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

0 投票
2 回答
2605 浏览

java - LinkedHashSet .equals() 与具有相同元素但顺序不同的 LinkedList .equals()

考虑以下 SSCCE:

这打印:

但是,如果您更改LinkedHashSetLinkedList

它产生:

我的问题是澄清之一。有人可以帮助理解这一点吗?为什么 aLinkedHashSet会被认为是相等的,而相同的则LinkedList不会呢?我假设定义ListSet发挥作用,但我不确定。

基本上,我的意思是,如果您认为Sets 相同,您是否也认为Lists 相同?反之亦然(假设没有重复元素)?

0 投票
1 回答
635 浏览

java - LinkedHashSet 文档歧义:重新插入

LinkedHashSet的 java 文档说明了这一点:

请注意,如果将元素重新插入集合中,则插入顺序不受影响。(如果 s.add(e) 被调用,而 s.contains(e) 将在调用之前立即返回 true,则元素 e 被重新插入到集合 s 中。)

对于最近的一个项目,我决定使用一个在客户端-服务器通信中保存一组数据令牌,以便在某些列表视图小部件中显示给用户。我的想法是我可以用更新的数据廉价地重新插入元素,并且用户不会感到惊讶,因为顺序不会改变。

显然情况并非如此,使用 Oracle JRE 1.7.0_55-b13 它像任何其他Set一样运行,正如这个简短的测试程序所示:

输出

因此,我的问题是,由于元素b没有重新插入到集合中(即必须将其删除,然后重新添加以更新其值),那么 java 文档中注释的意义是什么?

谢谢!

0 投票
0 回答
1017 浏览

java - 替换 LinkedHashSet 上项目的值

我有一个LinkedHashSet存储Json对象,我用它来保持项目插入的顺序。但是现在,我想根据条件更新特定项目的值。

删除特定项目很容易,但我不知道如何进行更新。