2013-03-14 16 views
2

在下面的程序:試圖創建使用字符串作爲密鑰雙Java中的哈希表作爲值

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:錯誤:意外的類型 私人Hashtable的模型=新的Hashtable();; //這不起作用 ^ 要求:參考 發現:雙 HashTableStringdouble.java:7:錯誤:意外的類型 私人Hashtable的模型=新的Hashtable();; //這不起作用 ^ 要求:參考 發現:雙 2個錯誤

我不知道我在做什麼錯在這裏。請解釋一個Hashtable是如何工作的。

+3

你必須使用'Double'。 'double'是一個原始類型。 – Kai 2013-03-14 11:25:26

+0

您不允許在泛型中使用基元。 閱讀全文: http://stackoverflow.com/questions/2721546/why-dont-generics-support-primitive-types – rbobin 2013-03-14 11:27:35

+0

泛型不能採用Java中的原始值。 (只是強調你所要做的不是'HashTable'特定的。) – Quetzalcoatl 2013-03-14 11:29:23

回答

10

你不能在Hashtable中使用原語作爲鍵或值,你需要使用一個對象。例如,它可以與Double而不是double一起使用。它與double[]協同工作的原因是數組是Java中的對象。

而且,哈希表是有點過時,HashMap最好在大多數情況下:

private Map<String, Double> model = new HashMap<String, Double>(); 
//or if you use Java 7+ 
private Map<String, Double> model = new HashMap<>(); 
4

嘗試使用雙類,而不是「本地」雙

6
  1. 不要使用Hashtable;使用HashMapHashtable是集合框架時代之前來自Java 1.0的剩餘。
  2. 這不是關於地圖如何在Java中工作,而是Java如何工作。您無法在任何地方將基元類型替換爲引用類型。
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[]) 
    { 
    } 
} 
2
  1. Collection·您不能使用基本類型。 Collection s只能包含Object類型的後代。如果你需要基元的集合,你應該看看這個問題:Most efficient Java primitive collections library

  2. 使用HashMap而不是Hashtable。如果你確定,你需要一個同步收集,看看Collections.synchronizedMap()。例如:

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

1

使用Double而不是double。在通用原始數據類型不允許
,不要忘記標記你接受的正確答案。歡迎來到stackoverflow。 如果使用double[]那麼就意味着這是雙陣列object(只對象可以是在有通用) ,當你使用double這意味着原始雙

+0

爲什麼你在問題的評論中問我?你似乎知道這一點。 – Kai 2013-03-14 12:25:26

+0

@ user714965想確保我們在同一頁面上。 – AmitG 2013-03-14 12:40:04

相關問題