Tag: 集合

如何使用java.Set

我试图让它工作很长一段时间,但似乎无法得到它。 我有Block的Block塔。 我已经使用数组工作了,但我想学习Set的。 我想得到类似的function: public class Tower { public Tower(){ } public Tower add(Block k1){ //(…) //if block already in tower, return “Block already in tower” } public Tower delete(Block k1){ //(…) //if block already dleted, show “No such block in tower” } } 有人给了我一些代码,但在尝试使用时我经常遇到错误: Set tower = new HashSet(); boolean added = tower.add( k1 […]

Java Collection – 独特的关键和独特的价值

我需要一个可以根据键查找值的集合,反之亦然。 对于每个值,都有一个键,每个键都有一个值。 是否有可以使用的数据结构?

如何根据值来比较两个地图

如何按价值比较两张地图? 我有两个包含相等值的地图,并希望通过它们的值进行比较。 这是一个例子: Map a = new HashMap(); a.put(“foo”, “bar”+”bar”); a.put(“zoo”, “bar”+”bar”); Map b = new HashMap(); b.put(new String(“foo”), “bar”+”bar”); b.put(new String(“zoo”), “bar”+”bar”); System.out.println(“equals: ” + a.equals(b)); // obviously false …. what to call to obtain a true? [[ 编辑:有人请编辑并修复此问题,以表示其实际意味着什么。 上面的代码打印“true”,而不是“false”。 ]] 显然,要实现比较并不困难,只需比较所有键及其相关值即可。 我不相信我是第一个这样做的人,因此必须在java或jakarta.commons库中已经有一个库函数。 谢谢

我什么时候应该使用Hashtable而不是HashMap

这不是关于Hashtable和HashMap之间差异的问题。 我知道Hashtable对象不能接受键或值条目的null值,它是同步集合,并且它使用的内存比HashMap略少。 我想知道使用Hashtable而不是HashMap更合适的场景。

在使用迭代器时解释集合的同步?

我知道像Hashtable这样的集合是同步的,但是有人可以向我解释它是如何工作的,以及在什么时候访问仅限于并​​发调用? 例如,假设我使用了一些像这样的迭代器: Hashtable map = new Hashtable(); void dosomething1(){ for (Iterator<Map.Entry> i = map.entrySet().iterator(); i.hasNext();){ // do something } } void dosomething2(){ for (Iterator<Map.Entry> i = map.entrySet().iterator(); i.hasNext();){ // do something // and remove it i.remove(); } } void putsomething(int a, int b){ map.put(a,b); } void removesomething(int a){ map.remove(a); } var clear(){ map = new […]

为什么Hashtable不采用null键?

为什么Hashtable不采用null键? 为什么HashMap允许null键? 使这两个类的关键行为如此不同的目的是什么?

如何将嵌套Java集合中的所有项目展平为单个列表?

给定复杂的嵌套对象集合,例如: Set<List<Map<String, List>>> complexNestedCollection; 是否存在通用方法来展平它并获得包含在其中的所有Object的单个List ? 一些细节: 该列表不应包含集合对象本身或映射键 – 仅包含最低级别的值。 它应尽可能遵循相同的顺序 – 因此在示例中,列表中的项目将按顺序排列,而映射/集合的排序将取决于实现。 它可以选择性地排除重复 更新:理想情况下,它应检测/处理任何级别的循环引用,例如List<List> ,其中外部List将自身包含为成员。 (感谢AdrianJałoszewski在下面的评论中提到这一点)。 注意:实际的用例是从List<List>获取所有字符串,这可以通过两个循环轻松完成,但它让我对一般情况感到疑惑。

什么时候应该返回接口和具体类?

当我用Java编程时,我几乎总是出于习惯,写下这样的东西: public List foo() { return new ArrayList(); } 大多数时候甚至没有考虑过它。 现在,问题是:我是否应该始终将接口指定为返回类型? 或者建议使用接口的实际实现,如果是,在什么情况下? 很明显,使用界面有很多优点(这就是它的原因)。 在大多数情况下,库函数使用的具体实现并不重要。 但也许有些情况确实很重要。 例如,如果我知道我将主要访问列表中的数据,则LinkedList会很糟糕。 但是如果我的库函数只返回界面,我根本就不知道。 为了安全起见,我甚至可能需要将列表显式复制到ArrayList : List bar = foo(); List myList = bar instanceof LinkedList ? new ArrayList(bar) : bar; 但这似乎很可怕,我的同事可能会在自助餐厅里诽谤我。 理所当然。 你们有什么感想? 您的指导方针是什么?您何时倾向于抽象解决方案,何时会显示您的实施细节以获得潜在的性能提升?

如何使用在Java Maps中设置为键

我有一个使用Set作为键类型的Map,如下所示: Map<Set, Val> map; 当我查询map.containsKey(myBunchOfThings)时,它返回false,我不明白为什么。 我可以遍历键集中的每个键,并validation是否有一个键(1)具有相同的hashCode,(2)对于myBunchOfThings是equals()。 System.out.println(map.containsKey(myBunchOfThings)); // false. for (Set k : map.keySet()) { if (k.hashCode() == myBunchOfThings.hashCode() && k.equals(myBunchOfThings) { System.out.println(“Fail at life.”); // it prints this. } } 我是否只是从根本上误解了containsKey的合约? 使用集合(或更一般地说,集合)作为地图的关键是否有秘密?

Java中的多值哈希表

是否可以在哈希表中为同一个键设置多个值? 如果没有,你能建议任何可以使用的类或接口吗?