import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public static void printNumWordsDiscovered( HashMap<String,Integer> vocab, HashSet<String> dictionary ) {
HashMap <String,Integer> Combine = new HashMap <String,Integer> ();
Iterator iterVoc = vocab.entrySet().iterator();
List<String> Dic = new ArrayList<String>();
int i = 0;
double actual = 0.0;
double token = 0.0;
while(iterVoc.hasNext()){
Map.Entry iterVocE = (Map.Entry)iterVoc.next();
if (dictionary.contains(iterVocE.getKey().toString())){
int Value = (int) iterVocE.getValue();
actual += 1;
token += Value;
Combine.put(iterVocE.getKey().toString(), Value);
}
}
for(String s: dictionary.KeySet()){
if (Combine.contains(dictionary.get(s).toString())){
System.out.println("Dicovered " + dictionary.get(s) + " ( count " + Combine.get(dictionary.get(s)) + " )");
}
}
}
我正在尝试遍历HashSet,并且我得到有关我的.get()方法的错误。你如何在HashSet中获得密钥?
答案 0 :(得分:2)
HashSet由HashMap支持。我想先提一下,因为马努蒂所说的并不完全正确。 HashSet确实有一个键;你只是没有明确地知道来自HashSet外部的密钥(或者你没有把它称为密钥,你称之为HashSet之外的值)。
实际上,内部HashMap中的键是您在HashSet #add(E)中使用的值。 HashSet的代码#add(E):
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
其中PRESENT只是值的虚拟对象:
private static final Object PRESENT = new Object();
您想要做的是调用HashSet的迭代器来迭代所有键。根据java.util.HashSet#iterator文档:
返回此set中元素的迭代器。元素按特定顺序返回。
所以这相当于获取内部HashMap,获取HashMap#keySet,然后获取迭代器。并不重要,但这正是HashSet的内部代码实际上是如何做到的:
public Iterator<E> iterator() {
return map.keySet().iterator();
}
所以这可能比你想要的更多一些解释,但对你的问题: 没有HashSet #get函数,没有HashSet#KeySet函数,没有HashMap#contains函数所以我建议你在访问http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html和HashMap文档http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html中的HashSet文档>任何进一步。如有疑问,请阅读文档。在Java中,您可以获得处理API的独特优势,该API非常有据可查。如果你选择不使用它,那就浪费了。
为了获得&#34;在HashSet中你必须拥有导致相同hashCode的对象...所以我不确定我是否完全理解你正在做的事情的逻辑。换句话说,如果你已经有了这个对象,你就不需要从HashSet中获取它。
无论如何,您的代码的最后6行可以更改为:
for(String s: dictionary.iterator()){
if (Combine.containsKey(s)){
System.out.println("Dicovered " + s + " ( count " + Combine.get(s) + " )");
}
}
答案 1 :(得分:0)
您可以使用HashSet的Iterator。
Iterator it = dictionary.iterator();
String element;
while ( it.hasNext() ) {
element = ( String ) it.next();
if ( Combine.contains(element) ){
System.out.println("Dicovered " + element + " ( count " + Combine.get(element) + " )");
}
}
使用返回Iterator的迭代器方法迭代HashSet。 使用迭代器模式而不是:
for(String s: dictionary.KeySet()){
if (Combine.contains(dictionary.get(s).toString())){
System.out.println("Dicovered " + dictionary.get(s) + " ( count " + Combine.get(dictionary.get(s)) + " )");
}
}
祝你好运!