繁体   English   中英

尝试使用string作为键和double作为值在java中创建哈希表

[英]Trying to create a hash table in java using string as key & double as value

在以下程序中:

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[])
    {
    }
}

有双[]但不是双倍。 它给出以下错误:

HashTableStringdouble.java:7:错误:意外类型private Hashtable model = new Hashtable();; //这不起作用^ required:reference found:double HashTableStringdouble.java:7:error:unexpected type private Hashtable model = new Hashtable();; //这不起作用^必需:引用找到:double 2错误

我不确定我在这里做错了什么。 请解释一下Hashtable的工作原理。

您不能将原语用作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<>();
  1. 不要使用Hashtable ; 使用HashMap 在集合框架时代之前, Hashtable是Java 1.0的遗留物。
  2. 这不是关于地图如何在Java中工作,而是关于Java如何工作。 您不能在任何地方用基本类型替换引用类型。

尝试使用Double类而不是“native”double

  1. 您不能在Collection使用原始类型。 Collection s只能包含Object类型的后代。 如果您需要具有基元的集合,您应该看看这个问题: 最有效的Java原始集合库

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

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

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

private Hashtable<String, Double> model  = new Hashtable<String, Double>();
import java.util.*;

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


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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM