Java 不兼容类型:int和<;nulltype>;
我在使用(哈希表[bucket][size]==null)时遇到问题。我想知道,如果null不是int类型,您如何检查插槽是否为null。有什么想法/提示吗Java 不兼容类型:int和<;nulltype>;,java,types,null,int,Java,Types,Null,Int,我在使用(哈希表[bucket][size]==null)时遇到问题。我想知道,如果null不是int类型,您如何检查插槽是否为null。有什么想法/提示吗 public void add(int n){ int bucket = hashF(n); int p=0; int size = hashTable[0].length; for(int i=0; i>size; i++){ if(hashTable[bucket][size] == null){
public void add(int n){
int bucket = hashF(n);
int p=0;
int size = hashTable[0].length;
for(int i=0; i>size; i++){
if(hashTable[bucket][size] == null){
hashTable[bucket][size]= n;
break;
}
if(i+1 == size){
bucket++;
i = -1;
}
if(bucket ==10){
bucket = 0;
}
p++;
if(p== hashTable.length*hashTable[0].length){
break;
}
}
for(int i=0; i<BST.length; i++){
if(BST[i] == null){
BST[i] = n;
break;
}
else if(n<BST[i]){
i= 2*i;
}
else{
i = 2*i+1;
}
}
}
public void add(int n){
int bucket=hashF(n);
int p=0;
int size=哈希表[0]。长度;
对于(int i=0;i>size;i++){
if(哈希表[bucket][size]==null){
哈希表[bucket][size]=n;
打破
}
如果(i+1==大小){
bucket++;
i=-1;
}
如果(桶==10){
桶=0;
}
p++;
if(p==hashTable.length*hashTable[0].length){
打破
}
}
对于(int i=0;i假设哈希表是一个int的2D数组,您无法检查它的一个元素是否将为null,因为它永远不会为null。基元永远不能为null,因为它不是对象引用。它将始终具有一个值-其默认值为0
Java原语(如int
)没有“未赋值”值-它们总是有一个值
如果要表示“未分配”,请使用一个“不可能”的大小值,例如初始化时要分配的-1
。然后在哈希表[bucket][size]=-1
的代码测试中,确定它是否处于初始状态。它看起来不像哈希表[bucket][size]
实际上可以为null。你为什么要检查它?它应该是可以为null的吗?“我想知道如果null不是int类型,你怎么能检查插槽是否为null。”你不能,因为从来都不是这样。或者使用可以为null的东西(在Java中,这意味着你必须使用非原语类型;整数
,也许?),或者找到一个不包含null的不同解决方案。那么这是否意味着我们必须将其作为一个泛型类来检查特定插槽是否为nothing int?如果使用“sentinel”int
值不是一个选项(即,所有int
在哈希表中都有效),那么除了转到Integer
(或使您的哈希表通用)之外,您真的没有什么可以做的了。我们可以在哈希表中添加负数。哈希表的确切定义是什么-请显示code.hashTable=new int[10][size];我想这是您想要的