尝试使用字符串作为键在java中创建哈希表&;双重价值

尝试使用字符串作为键在java中创建哈希表&;双重价值,java,string,double,hashtable,Java,String,Double,Hashtable,在以下程序中: import java.util.*; public class HashTableStringdouble { // private Hashtable<String, double[]> model = new Hashtable<String, double[]>();; private Hashtable<String, double> model = new Hashtable<String, double>

在以下程序中:

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[])
    {
    }
}
import java.util.*;
公共类HashTableStringdouble
{
//私有哈希表模型=新哈希表();;
private Hashtable model=new Hashtable();;//这不起作用
公共静态void main(字符串参数[])
{
}
}
有双[]行得通,但不是双。它给出了以下错误:

java:7:错误:意外类型 私有哈希表模型=新哈希表();;//这行不通 ^ 必填项:参考 发现:双 java:7:错误:意外类型 私有哈希表模型=新哈希表();;//这行不通 ^ 必填项:参考 发现:双 2个错误


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

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

此外,哈希表有些过时,在大多数情况下是首选的:

private Map<String, Double> model  = new HashMap<String, Double>();
//or if you use Java 7+
private Map<String, Double> model  = new HashMap<>();
private Map model=new HashMap();
//或者如果您使用Java7+
私有映射模型=新的HashMap();

尝试使用Double类而不是“原生”Double类

  • 不要使用
    哈希表
    ;使用
    HashMap
    Hashtable
    是Java1.0遗留下来的,在Collections框架出现之前
  • 这不是关于映射在Java中的工作方式,而是关于Java在一般情况下的工作方式。不能在任何地方用基元类型替换引用类型

  • 使用包装类。这就是为什么第一时间发明了计算机的原因之一

    private Hashtable<String, Double> model  = new Hashtable<String, Double>();
    
    private Hashtable model=new Hashtable();
    
    导入java.util.*;
    公共类HashTableStringdouble
    {
    私有哈希表模型=新哈希表();
    公共静态void main(字符串参数[])
    {
    }
    }
    
  • 您不能在
    Collection
    s中使用基元类型<代码>集合s只能包含
    对象
    类型的后代。如果您需要具有原语的集合,则应查看以下问题:

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

    映射模型=Collections.synchronizedMap(新的HashMap())


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

    您必须使用
    double
    double
    是基元类型。不允许在泛型中使用基元。请阅读:泛型不能接受Java中的原语值。(只是强调您试图做的不是特定于哈希表的
    HashTable
    )@user714965如果我们使用
    double[]
    ?我们可以使用double[],但它应该是原始数据类型的数组对象。你为什么在问题的注释中问我?您似乎知道这一点。@user714965希望确保我们在同一页上。
    import java.util.*;
    
    public class HashTableStringdouble
    {
      private Hashtable<String, Double> model  = new Hashtable<String, Double>();
    
    
        public static void main(String args[])
        {
        }
    }