【问题标题】:Trying to create a hash table in java using string as key & double as value尝试使用字符串作为键和双倍作为值在java中创建哈希表
【发布时间】:2013-03-02 17:16:41
【问题描述】:

在以下程序中:

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:错误:意外类型 私有哈希表模型=新哈希表();; // 这不起作用 ^ 必填:参考 发现:双 HashTableStringdouble.java:7:错误:意外类型 私有哈希表模型=新哈希表();; // 这不起作用 ^ 必填:参考 发现:双 2 个错误

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

【问题讨论】:

  • 你必须使用Doubledouble 是原始类型。
  • 不允许在泛型中使用原语。阅读:stackoverflow.com/questions/2721546/…
  • 泛型在 Java 中不能采用原始值。 (只是强调你想要做的不是HashTable 特定的。)
  • @user714965 如果我们使用 double[] 会怎样?我们可以使用 double[] 但它应该是原始数据类型的数组对象。

标签: java string double hashtable


【解决方案1】:
  1. 您不能在Collections 中使用原始类型。 Collections 只能包含 Object 类型的后代。如果你需要原语的集合,你应该看看这个问题:Most efficient Java primitive collections library

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你为什么在问题的 cmets 中问我?你似乎知道这一点。
    • @user714965 想确保我们在同一页面上。
    【解决方案3】:

    您不能将原始数据用作 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<>();
    

    【讨论】:

      【解决方案4】:
      import java.util.*;
      
      public class HashTableStringdouble
      {
        private Hashtable<String, Double> model  = new Hashtable<String, Double>();
      
      
          public static void main(String args[])
          {
          }
      }
      

      【讨论】:

        【解决方案5】:

        使用包装类。这就是最初发明的原因之一。

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

        【讨论】:

          【解决方案6】:
          1. 不要使用Hashtable;使用HashMapHashtable 是 Java 1.0 的遗留物,在 Collections Framework 时代之前。
          2. 这不是关于地图在 Java 中的工作方式,而是 Java 的一般工作方式。您不能在任何地方用原始类型替换引用类型。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-07-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-04
              • 1970-01-01
              • 2012-10-03
              相关资源
              最近更新 更多