2017-12-03 10 views
0

現在、オンラインJavaコースを行っていますが、割り当てに問題があります。この割り当ては、本質的に配列だけを使用し、他のJavaデータ構造やメソッドを使用しないハッシュマップを作成することです。これは私のコードです:配列内のリンクされたリスト

public class test { 

    static String[] array = new String[10]; 

    class Cell<T> { 
     T first; 
     Cell<T> next; 

     Cell(T h, Cell<T> t) { 
      first = h; 
      next = t; 
     } 
    } 

    public static int hashFunction(String a) { 
     int sum = 1; 
     for (int i = 0; i < a.length(); i++) { 
      char b = a.charAt(i); 
      int value = (int) b; 
      sum *= value; 
     } 
     return sum % array.length; 
    } 

    public static void arraySetter(String a) { 
     int position = hashFunction(a); 
     if (array[position] == null) { 
      array[position] = a; 

     } else { 
      //Need a Linked List here for when there is already a item in the array at the same index. 
     } 
    } 

    public static void printArray() { 
     for (int i = 0; i < array.length; i++) { 
      System.out.println(array[i]); 
     } 
    } 

    public static void main(String[] args) { 
     arraySetter("abc"); 
     printArray(); 
    } 
} 

私のコードは基本的にリストのリストを作成します。配列の各位置で、hashFunctionに同じ値を持つ2つの項目がある場合にのみ初期化されるリストを作成する必要があります。私はまだその関数を書いていないが、私の問題は今、配列の各位置にlinkedListを作成する方法を知らないということです。誰かがここで私を助けることができますか?

+0

(あなたが明らかにArrayListを使用することはできないので)ダイナミック配列を使うのは、リンクリストよりも簡単です。 IOW、配列を使用し、使用されたサイズを格納し、使用時のサイズが配列の合計サイズを超えると、より大きな配列とコピーを作成します。 – hyde

+0

文字列の配列は必要ありません。 Cell の配列が必要です。しかし、それはまったくHashMapではありません。マップは辞書です。固有のキーに関連付けられた値が含まれています。 –

+0

@JBNizetどのようにハッシュマップではありませんか? – shmosel

答えて

0

これはあなたのデータを格納すべきデータ構造である。このようString[]として配列を使用する場合

セルは[]配列

あなたはどんな他のよりを追加することができませんその配列にStringのインスタンス

新しいハッシュコードを取得するとき、あなたは新しいものを作成する必要があります

配列[位置] =新しいCellを<>(、NULL);

linkedListの最初の要素であるので、headと呼びます。

たびは、同じハッシュコードを持つ値が提供され、あなたは、あなたは、Cellの新しいインスタンスとそれを定義し、そのnext値がnullであるCellまでheadから反復処理する必要があります。

これは、一般的にaddLast法と呼ばれ、あなたはここで良い例を見つけるCA:addLast method for linkedList

https://www.cs.cmu.edu/~adamchik/15-121/lectures/Linked%20Lists/linked%20lists.html

0

あなたが衝突を回避するリンクリストを望むなら、あなたは頭が含まれて配列を宣言する必要がありますリンクされたリスト

Node<K,V>[] table; 

サンプルコードが完全に実装されていません。キーが同じである.IF

class Node<K,V> { 
     K key; 
     V value; 
     Node<K,V> next; 
     } 

ノードがリンクされた使用する場合は、時間もノードを使用して衝突を回避するために、配列を使用したいlist.If、あなたはまた、次の値を上書きしてしなければならない現在のキーと値が含まれますキーと値キーを含むキーは、等価性と次の変数がないかどうかを確認するために必要です。

関連する問題