我正在创建一个进行线性探测以查找键索引的哈希图。如果键已经在索引中,我想增加它的值,而不是向新索引添加一个。
例如,如果我得到字符串“五,五,五”的字数,我的输出是五1,五1,五1,而不是五3。
我认为一定是我的 containsKey 方法,它使用 get 方法来检查我的密钥是否已在映射中。下面是我的Hashmap.java类。
import java.util.Hashtable;
import java.util.ArrayList;
import java.lang.Object;
public class Hashmap<K,V> implements MapSet<K,V>
{
private Object hashMap[]; //hash table
private int capacity; // capacity == table.length
private int collisions; // number of collisions
private int numItems; // number of hash table entries
public Hashmap(int arrayCapacity){
capacity = arrayCapacity;
hashMap = new Object[capacity];
collisions = 0;
numItems = 0;
}
//Returns true if the map contains a key-value pair with the given key
@SuppressWarnings({"unchecked"})
public boolean containsKey( K key ){
return get(key) != null;
}
@SuppressWarnings({"unchecked"})
public V put(K key, V value){
int hash = Math.abs(key.hashCode());
int index = hash% hashMap.length; //getting a new index for the key-value-pair
KeyValuePair<K,V> pair = (KeyValuePair<K,V>) hashMap[index];
while(pair != null && !pair.getKey().equals(key)){
index = (index+1)% hashMap.length;
pair = (KeyValuePair<K,V>)hashMap[index];
collisions++;
}
if (pair == null){
//a null spot has been found, the key value pair will be added here.
KeyValuePair<K,V> temp = new KeyValuePair<K,V>(key,value);
hashMap[index] = temp;
numItems++;
if (numItems > hashMap.length / 2) {
ensureCapacity();
}
return value;
}
else {
//the key is the same as one already in the hashmap.
//sets the value of the new key to the old key.
V oldValue = pair.getValue();
pair.setValue(value);
return oldValue;
}
}
@SuppressWarnings({"unchecked"})
public V get(K key){
int hash = Math.abs(key.hashCode());
int index = hash% hashMap.length;
KeyValuePair<K,V> pair = (KeyValuePair<K,V>) hashMap[index];
if(pair == null){
return null;
}
else if(pair.getKey() == key){
return pair.getValue();
}
else{
index = (index + 1)% hashMap.length;
int progress = 0;
while(hashMap[index] != null){
progress++;
KeyValuePair<K,V> item = (KeyValuePair<K,V>) hashMap[index];
if(item.getKey().equals(key))
return item.getValue();
if (progress == hashMap.length)
break;
}
return null;
}
}
参考这个例子
import java.util.*;
import java.lang.*;
import javax.swing.JOptionPane;
import java.io.*;
public class TestingTables
{
public static void main(String args[])
{
{
String s = "Any text for word word count";
String[] splitted = s.split(" ");
Map<String, Integer> hm = new HashMap<String, Integer>();
int x;
for (int i=0; i<splitted.length ; i++) {
if (hm.containsKey(splitter[i])) {
int cont = hm.get(splitter[i]);
hm.put(splitter[i], cont + 1)
} else {
hm.put(splitted[i], 1);
}
}
}
}
我使用下面代码执行分页查询,发现metadata为[],不应该是返回metadata:[total: 0]吗,有谁知道不?
它显示了以下错误:在Homepractice类中,Main方法必须返回void类型的值。gym,请将main方法定义为:public static void main(String[]args)
问题内容: 只是出于好奇。 数字似乎不太合逻辑。顺便说一句,就像或返回假。这是javascript的特性之一,还是有原因呢? 编辑:谢谢你的回答。但是,要让所有人适应现实并非易事。阅读答案和Wiki我了解得更多,但仍然有类似 与NaN的比较始终会返回无序结果,即使与自身进行比较也是如此。比较谓词是信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是无信号的,因此x = x返回false
问题内容: 在Python IDLE 3.5.0 Shell中工作。根据我对内置“过滤器”功能的了解,它会根据您传递给它的内容返回列表,元组或字符串。因此,为什么下面的第一个分配有效,而第二个却不起作用(“ 只是交互式Python提示) 问题答案: 看看python文档(从此处开始): 从这些 iterable 元素构造一个迭代器,为其 功能 返回true。 因此,为了获取列表,您必须使用列表类:
问题内容: 我有一个箭头函数,看起来像这样(简化): 但是当我调用它时,我得到: 为什么? 例: ( 注意: 对于上述带有箭头功能的 特定 问题,这是一个干净,规范的重复目标。) 问题答案: 当您使用箭头函数的函数主体版本(带有)时,没有暗示。您必须指定它。当您使用 简洁 主体(no )时,主体表达式的结果将由函数隐式返回。 因此,您可以使用显式的方式编写该代码: 或简洁的主体: 例子: 略 切线
我有两张桌子锻炼和练习。我正在尝试使用与我们点击的锻炼匹配的workout_id获取所有锻炼。我做了一个内部联接查询,但它似乎没有返回任何东西。我的查询有问题吗? 我正在使用SQLite创建我的数据库。我已经检查了,以确保练习表中有练习,并且它们有一个workout_id。 2)回到我的WorkoutProvider类中,我将selectionArgs设置为: 并把它传递到我的RawQuery中。