gpt4 book ai didi

java - K 和 int Java 之间不兼容的操作数类型

转载 作者:行者123 更新时间:2023-12-02 05:18:29 24 4
gpt4 key购买 nike

我正在制作一个具有线性探测碰撞的哈希表。我正在尝试将哈希表的元素添加到集合或集合中。我设置哈希表的方式是,它是一个节点数组,其中包含通用类型 K 的“键”和通用类型 V 的“值”。表中没有数组节点的索引是null,但原来有节点但被删除的索引标记为包含 new Node(-1, -1) 的 Node。当我去打印哈希表时,我想避免打印已删除的点(包含键 -1 的索引)。相关代码如下:

添加到集合或集合的方法(在哈希表类中)

@Override
public Set<K> keySet() {
Set<K> s = new HashSet<K>();
for(int i=0; i<this.hashtable.length; i++) {
if(this.hashtable[i] != null && this.hashtable[i].key != -1)
s.add(this.hashtable[i].key);
}
return s;
}

@Override
public Collection<V> values() {
LinkedList<V> l = new LinkedList<V>();
for(int i=0; i<this.hashtable.length; i++) {
if(this.hashtable[i] != null && this.hashtable[i].key != -1)
l.add(this.hashtable[i].val);
}
return l;
}

节点类(不是哈希表类):

private final class Node<K extends Comparable<? super K>, V>  {
public K key;
public V val;

public Node() {
this.key = null;
this.val = null;
}

public Node(K theKey, V theValue) {
this.key = theKey;
this.val = theValue;
}
}

实际哈希表类中的主要方法:

public static void main(String[] args) {
MyJHUHashMap<Integer, String> m = new MyJHUHashMap<>();
m.put(1, "1!");
m.put(2, "2!");
m.put(3, "3!");
m.put(4, "4!");
m.put(5, "5!");
m.put(6, "6!");
m.put(7, "7!");
m.put(8, "8!");
m.put(9, "9!");
m.put(10, "10!");
m.put(11, "11!");
m.put(12, "12!");
m.put(13, "6!");
m.put(14, "7!");
m.put(15, "8!");
m.put(16, "9!");
m.put(17, "10!");
m.put(18, "11!");
m.put(19, "12!");
m.put(20, "10!");
m.put(21, "11!");
m.put(22, "12!");
m.put(23, "23!");
System.out.println(m.get(4));
System.out.println(m.get(12));
System.out.println(m.get(25));
System.out.println(m.containsKey(22));
System.out.println(m.containsKey(35));
m.remove(23);
m.remove(18);
//m.put(7, 7);
System.out.println(m.hashtable.length);
System.out.println(m.size());
for(int i=0; i<m.hashtable.length; i++) {
if(m.hashtable[i] != null && m.hashtable[i].key != -1)
System.out.print(m.hashtable[i].key + " ");
}
}

长度似乎正确,大小似乎正确,并且按键确实打印出来,但是包含 -1 值。为了克服这个问题,我在方法中编写了“this.hashtable[i].key!= -1”。但是,我在 keySet() 和 value() 方法中收到错误“不兼容的操作数类型 K 和 int”,但在 main 方法中却没有收到错误消息。谁能指出如何克服这个问题?

最佳答案

不要使用 -1 作为“特殊键值”,因为您的键必须是 K 类型(并且 K 可以是任何内容:字符串、日期等)。

使用 null 代替。

关于java - K 和 int Java 之间不兼容的操作数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26702738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com