3

在以下程序中:

import java.util.*;

public class HashTableStringdouble
{
//  private Hashtable<String, double[]> model  = new Hashtable<String, double[]>();;
    private Hashtable<String, double> model  = new Hashtable<String, double>();;                // this does not work

    public static void main(String args[])
    {
    }
}

有 double[] 有效,但不能加倍。它给出了以下错误:

HashTableStringdouble.java:7: 错误: 意外类型私有 Hashtable 模型 = new Hashtable();; // 这不起作用 ^ 必需:找到参考:double HashTableStringdouble.java:7:错误:意外类型 private Hashtable model = new Hashtable();; // 这不起作用 ^ 必需:找到参考:双 2 错误

我不确定我在这里做错了什么。请解释哈希表是如何工作的。

4

7 回答 7

11

您不能将原语用作 Hashtable 中的键或值,您需要使用对象。例如,它将与Double而不是一起工作double。它使用的原因double[]是数组是 Java 中的对象。

此外,Hashtable 有点过时,在大多数情况下首选HashMap :

private Map<String, Double> model  = new HashMap<String, Double>();
//or if you use Java 7+
private Map<String, Double> model  = new HashMap<>();
于 2013-03-14T11:26:02.147 回答
6
  1. 不要使用Hashtable; 使用HashMap. Hashtable是 Java 1.0 的遗留物,在 Collections Framework 时代之前。
  2. 这不是关于地图在 Java 中的工作方式,而是 Java 的一般工作方式。您不能在任何地方用原始类型替换引用类型。
于 2013-03-14T11:26:44.800 回答
4

尝试使用 Double 类而不是“本机”双

于 2013-03-14T11:26:30.923 回答
2
  1. 您不能在Collections 中使用原始类型。Collections 只能包含Object类型的后代。如果您需要带有原语的集合,您应该看看这个问题:最有效的 Java 原语集合库

  2. 使用HashMap,不使用Hashtable。如果您确定需要同步集合,请查看Collections.synchronizedMap(). 例如:

    地图模型 = Collections.synchronizedMap(new HashMap());

于 2013-03-14T11:31:37.053 回答
1

使用包装类。这就是为什么首先发明它们的原因之一。

private Hashtable<String, Double> model  = new Hashtable<String, Double>();
于 2013-03-14T11:28:52.117 回答
1
import java.util.*;

public class HashTableStringdouble
{
  private Hashtable<String, Double> model  = new Hashtable<String, Double>();


    public static void main(String args[])
    {
    }
}
于 2013-03-14T11:30:27.930 回答
1

使用Double而不是double. 在通用原始数据类型中是不允许的
,并且不要忘记标记您已接受的正确答案。欢迎来到stackoverflow。如果你使用double[]那么这意味着这是双数组object(只有对象可以在泛型中)并且当你使用double它时意味着原始双

于 2013-03-14T11:51:26.607 回答