问题标签 [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.
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中性能更好呢?
java - 如何替换 LinkedHashSet 中的特定元素?
使用 ArrayList 我会做类似的事情
有没有一种简单的方法可以为 LinkedHashSet 实现这一目标?
java - 在 jcombobox 中使用linkedhashset?
我正在尝试使用 MVC 设计模式创建一个程序。在我的模型中,我创建了一组字符串。字符串只是大约 45 个语言环境的集合。
在我看来,我正在创建一个 JComboBox。我想按照它们的顺序使用 45 个唯一语言环境的集合,所以我使用的是 LinkedHashSet。
我在尝试将语言环境传递给 JComboBox 时遇到了麻烦,并且有些事情我不确定。
编辑:我想知道的主要事情是如何将我的 Set 放入我的 JComboBox。以下是我在写这篇文章时想到的其他一些问题。如果您愿意,请随时回答他们!
- 我应该使用 Set,它是正确的集合吗?
- 我应该使用 LinkedHashSet,它是正确的实现吗?
- 我是否正确使用了组合框?
- 有什么建议等吗?
- 我对数据结构不太了解,有什么好的资源吗?
这是我已经在使用的代码:
看法
模型
java - java - 如何在不重新排序的情况下从列表中删除重复项?
我正在尝试使用 Set Interface 从我的 String 类型的 List 对象中删除重复项,但我面临的问题是它还会重新排序我的列表,这是我不想要的。我想保留列表的顺序并仅删除重复项?
java - 那是什么在方法签名中?
我从这里阅读了关于 Set 接口的内容,下面的代码是一个从集合中删除重复项的通用方法。
我的问题是**< E>**
在 static before 之后放置的是什么Set<E>
?
我的意思是这还 Set<E>
不够吗?为什么<E>
有两次?
java - LinkedHashSet 不删除重复项
我正在尝试创建一个搜索算法,将坐标对存储在一个名为 HashSquareSpec 的包装类中。为了避免重复并保持插入顺序,我将每个 HashSquareSpec 插入到 LinkedHashSet 中。即使我重写了 equals() 方法和 hashCode() 方法,LinkedHashSet 仍然接受具有相同坐标对的两个 HashSquareSpec 对象。
HashSquare 类
和 HashSquareSpec 的超类
尽管有许多不同的 hashCode 变体和 Eclipse equals 和 hashCode 生成,firedShots 数据结构仍然接受重复。我的代码有什么问题?
java - LinkedHashSet 和 HashSet 的迭代器在源代码的什么地方实现了不同的行为?
我调查LinkedHashSet
和HashSet
收藏。
我写了一个小程序:
输出:
当我看到这种行为时,我开始研究集合的源代码。
我注意到 LinkedHashSet 和 HashSet 都使用
共同toString()
实现——从AbstractCollection
常见iterator()
于HashSet
是什么解释了我的代码LinkedHashSet
和HashSet
在我的代码中的不同输出?
伊万·巴巴宁回答后更新
对于LinkedHashSet
并HashSet
调用不同的构造函数:
对于 LinkedHashSet
-
对于 HashSet
-
HashMap
和 -的迭代器LinkedHasMap
(来自HashSet
)
研究keySet()
方法:
HashMap
:
LinkedHashMap
不能特别实现keySet
方法和使用HashMap
实现。
map.keySet().iterator() is
:
map.keySet()
返回相同的类型HashMap
,LinkedHashMap
因此调用相同的newEntryIterator()
方法。
是错误的说法吗?
用于 EJP 更新
我导航到HashSet#iterator
:
java - LinkedHashSet .equals() 与具有相同元素但顺序不同的 LinkedList .equals()
考虑以下 SSCCE:
这打印:
但是,如果您更改LinkedHashSet
为LinkedList
:
它产生:
我的问题是澄清之一。有人可以帮助理解这一点吗?为什么 aLinkedHashSet
会被认为是相等的,而相同的则LinkedList
不会呢?我假设定义List
并Set
发挥作用,但我不确定。
基本上,我的意思是,如果您认为Set
s 相同,您是否也认为List
s 相同?反之亦然(假设没有重复元素)?
java - LinkedHashSet 文档歧义:重新插入
LinkedHashSet的 java 文档说明了这一点:
请注意,如果将元素重新插入集合中,则插入顺序不受影响。(如果 s.add(e) 被调用,而 s.contains(e) 将在调用之前立即返回 true,则元素 e 被重新插入到集合 s 中。)
对于最近的一个项目,我决定使用一个在客户端-服务器通信中保存一组数据令牌,以便在某些列表视图小部件中显示给用户。我的想法是我可以用更新的数据廉价地重新插入元素,并且用户不会感到惊讶,因为顺序不会改变。
显然情况并非如此,使用 Oracle JRE 1.7.0_55-b13 它像任何其他Set一样运行,正如这个简短的测试程序所示:
输出
因此,我的问题是,由于元素b没有重新插入到集合中(即必须将其删除,然后重新添加以更新其值),那么 java 文档中注释的意义是什么?
谢谢!
java - 替换 LinkedHashSet 上项目的值
我有一个LinkedHashSet
存储Json
对象,我用它来保持项目插入的顺序。但是现在,我想根据条件更新特定项目的值。
删除特定项目很容易,但我不知道如何进行更新。