Tag: hashset

这两个java变量声明有什么区别?

public class SomeClass { private HashSet contents = new HashSet(); private Set contents2 = new HashSet(); } 有什么不同? 到底他们都是HashSet不是吗? 第二个看起来对我来说是错的,但我已经看到它经常使用,接受和工作。

HashSet允许重复

我似乎无法让HashSet实例按预期工作。 我使用的代码如下: import testing.Subclass; import java.util.HashSet; public class tester { public static void main(String[] args) throws Exception { HashSet set = new HashSet(); set.add(new Subclass(“007812”)); set.add(new Subclass(“007813”)); System.out.println(“Set size ” + set.size()); set.add(new Subclass(“007812”)); System.out.println(“Set size ” + set.size()); for(Subclass sub : set) { System.out.println(” sub acctNbr ” + sub.getAcctNbr()); } } } 子类 public […]

Hashset,Treeset和Linkedhashset,Hashmap之间的主要区别是什么?它在Java中是如何工作的?

我只是理解LinkedHashSet在插入时不允许重复元素。 但是,我不明白Hashset在java中是如何工作的? 我知道有一点Hashtable在Hashset中使用,所以哈希表用于存储元素,这里也不允许重复元素。 然后,Treeset也类似于Hashset,它也不允许重复条目,因此将看到唯一的元素,并且它遵循升序。 我对HashMap还有一个疑问 – Hashmap没有维护顺序。 它可能有一个空键和多个空值。 我只是不明白这一点,实际上是什么意思? 这有什么实际的例子吗? 我知道了一点,Hashmap曾经基于此工作 – 用于放入存储桶的密钥和值也有唯一的数字。 这样,就可以从桶中识别并获取密钥和价值。 当我将键/值对放在桶中时,其标识符是键的哈希码。 对于例如:密钥的哈希码是101,因此它存储在桶101中。一个桶可以存储多于密钥和值对。 假设一个例子,因为Object1是“A”,object2是“A”而object3是“B”,那么它具有相同的哈希码。 因此,它通过在同一个桶中共享相同的Hashcode来存储不同的对象。 我的疑问是,具有相同Hashcode的对象应该相等,不同的对象应该有不同的Hashcode? 我是初学者,请澄清我的疑虑并为这种愚蠢的怀疑道歉! 这是使用HashSet的程序, import java.util.*; public class Simple{ public static void main(String[] args){ HashSet hh=new HashSet(); hh.add(“D”); hh.add(“A”); hh.add(“B”); hh.add(“C”); hh.add(“a”); System.out.println(“Checking the size is:”+hh.size()+””); System.out.println(hh); Iterator i=hh.iterator(); while(i.hasNext()){ System.out.println(i.next()); } } } 输出是, Checking the size […]

HashSet与ArrayList

所以我有一个自定义类Class,它将拥有一组另一个自定义类Student。 所以它看起来像这样: public class Class { private Set students; // other methods } 现在,我将向学生们添加和删除许多学生,我也将改变已经在学生集中的学生的许多私人领域。 问题:我应该使用什么数据结构来实现这一目标? 由于我将更改set student中的Student对象的属性(从而更改哈希码),我应该使用ArrayList吗?

HashSet有两个等于对象?

我创建了一个对象HashSet,该值是一个对象(Triple),这是我自己的类。 但是我得到一个奇怪的事情,当我的HashSet上有两个相同的对象时,它有可能吗? 这是我在类Triple中的等于的重写方法 @Override public boolean equals(Object other){ if (other == null) return false; if (other == this) return true; if (this.getClass() != other.getClass()) return false; Triple otherTriple = (Triple)other; if(otherTriple.getSubject().equals(getSubject()) && otherTriple.getPredicate().equals(getPredicate()) && otherTriple.getObject().equals(getObject())) return true; return false; }

是什么导致java.util.HashSet和HashMap.keySet()类的iterator()稍微不可预测的排序?

六年前,我烧了几天试图追捕我完全确定的框架随机响应的地方。 在精心追逐整个框架确保它全部使用相同的Random实例后,我继续追逐单步执行代码。 这是高度重复的迭代自调用代码。 更糟糕的是,该死的效果只会在完成大量迭代后出现。 在+6小时之后,当我在javadoc中为HashSet.iterator()发现一行时,我终于处于智慧状态,表明它不能保证返回元素的顺序。 然后,我浏览了整个代码库,并用LinkedHashSet替换了所有HashSet实例。 而且,我的框架正好向确定性生活迈进! 哎呀! 我现在刚刚经历过同样的FREAKIN影响(至少这次只有3个小时)。 无论出于何种原因,我都错过了HashMap恰好为其keySet()提供相同方式的小细节。 这是关于这个主题的SO线程,虽然讨论从来没有完全回答我的问题: HashSet的迭代顺序 所以,我很好奇为什么会这样。 鉴于我两次都有一个巨大的单线程java应用程序在完全相同的实例化/插入空间中使用完全相同的JVM参数(来自同一批处理文件的多次运行)在同一台计算机上运行,​​几乎没有其他任何运行,这可能会扰乱JVM使得HashSet和HashMap在经过大量迭代之后会出现不可预测的行为(并不是因为javadoc说不依赖于顺序而不一致)? 从源代码(java.util中的这些类的实现)或您对JVM的了解(可能是某些GC影响内部java类在分配内部存储空间时获得非零内存的位置)的任何想法?

HashSet实现中的Null对象

在Java API中,HashSet的实现是使用Object作为内部HashMap的值, // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; } 但是HashMap允许它的值为null。 我认为没有必要填补价值,为什么需要这样做呢?

订购一个hashset示例?

我需要一个关于如何在HashSet上使用类似的类来获得升序的示例。 假设我有一个像这样的HashSet : HashSet hs = new HashSet(); 我怎样才能让hs按升序排列?

这个HashSet如何产生排序输出?

以下代码生成输出[1,2]即使hashset未排序。 Set set = new HashSet(); set.add(new Integer(2)); set.add(new Integer(1)); System.out.println(set); 这是为什么?

在Java中使用HashSets时,方法retainAll的时间和空间复杂度是多少?

例如,在下面的代码中: public int commonTwo(String[] a, String[] b) { Set common = new HashSet(Arrays.asList(a)); common.retainAll(new HashSet(Arrays.asList(b))); return common.size(); }