在Java中尝试使用字符串作为键、双精度浮点数作为值创建哈希表

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[]不会出错,但是使用double类型会出现以下错误:

HashTableStringdouble.java:7: error: unexpected type private Hashtable model = new Hashtable();; // this does not work ^ required: reference found: double HashTableStringdouble.java:7: error: unexpected type private Hashtable model = new Hashtable();; // this does not work ^ required: reference found: double 2 errors

我不确定自己哪里出了问题。请解释一下Hashtable是如何工作的。


3
你需要使用“Double”。“double”是一种原始类型。 - Kai
你不能在泛型中使用原始类型。 请阅读以下内容: https://dev59.com/onE85IYBdhLWcg3wikO- - rbobin
Java中的泛型无法接受原始值。(只是强调您尝试做的事情不是“HashTable”特定的。) - Quetzalcoatl
@user714965 如果我们使用 double[] 会怎样?我们可以使用 double[],但它应该是原始数据类型的数组对象。 - AmitG
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<>();

6
  1. 不要使用 Hashtable,使用 HashMapHashtable 是 Java 1.0 时代的遗留物,在集合框架出现之前就存在了。
  2. 这不是关于 Java 中 Map 的工作原理,而是关于 Java 总体的工作原理。您无法在任何地方将基本类型替换为引用类型。

4

尝试使用Double类代替“本地”双精度类型


2
  1. Collection中不能使用原始类型。 Collection只能包含Object类型的后代。如果您需要原始类型的集合,请参考此问题:Java原始类型集合库的最高效方法

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

    Map model = Collections.synchronizedMap(new HashMap());


1
使用Double代替double。在泛型中不允许原始数据类型
,别忘了标记你接受的正确答案。欢迎来到stackoverflow。 如果使用double [] ,则意味着这是双精度数组object(只有对象可以在泛型中存在) 当您使用double时,它表示原始双倍精度。

为什么你要在问题的评论中问我这个?看起来你已经知道了。 - Kai
@user714965 想确保我们在同一个页面上。 - AmitG

1

使用包装类。这正是它们被首次发明的原因之一。

private Hashtable<String, Double> model  = new Hashtable<String, Double>();

1
import java.util.*;

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接