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: エラー: 予期しないタイプのプライベート Hashtable モデル = new Hashtable();; // これは機能しません ^ 必須: 参照が見つかりました: double HashTableStringdouble.java:7: エラー: 予期しないタイプのプライベート Hashtable モデル = new Hashtable();; // これは機能しません ^ 必須: 参照が見つかりました: double 2 エラー

ここで何が間違っているのかわかりません。Hashtable の仕組みを説明してください。

4

7 に答える 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<>();
于 2013-03-14T11:26:02.147 に答える
6
  1. 使用しないでくださいHashtable。使用してHashMapください。HashtableCollections Framework の時代より前の Java 1.0 の名残です。
  2. これは、マップが Java でどのように機能するかではなく、Java が一般的にどのように機能するかについてです。どこでも参照型をプリミティブ型で置き換えることはできません。
于 2013-03-14T11:26:44.800 に答える
4

「ネイティブ」ダブルの代わりに Double クラスを使用してみてください

于 2013-03-14T11:26:30.923 に答える
2
  1. sでプリミティブ型を使用することはできませんCollection。s には、 typeCollectionの子孫のみを含めることができます。Objectプリミティブを含むコレクションが必要な場合は、次の質問を確認する必要があります:最も効率的な Java プリミティブ コレクション ライブラリ.

  2. HashMapではなく、使用してくださいHashtable。確実に同期コレクションが必要な場合は、 を参照してくださいCollections.synchronizedMap()。例えば:

    マップ モデル = Collections.synchronizedMap(new HashMap());

于 2013-03-14T11:31:37.053 に答える
1

Doubleの代わりに使用しdoubleます。一般的なプリミティブ データ型では許可され
ていません。受け入れた正解をマークすることを忘れないでください。スタックオーバーフローへようこそ。使用する場合double[]、これは double 配列であることを意味しobject(ジェネリックにはオブジェクトのみが存在できます)、使用するdouble場合はプリミティブ double を意味します

于 2013-03-14T11:51:26.607 に答える
1

ラッパー クラスを使用します。それが、そもそも が発明された理由の 1 つです。

private Hashtable<String, Double> model  = new Hashtable<String, Double>();
于 2013-03-14T11:28:52.117 に答える
1
import java.util.*;

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


    public static void main(String args[])
    {
    }
}
于 2013-03-14T11:30:27.930 に答える