2015-05-19 83 views
0

我正在將數據添加到HashMap中,其中節點是具有變量索引和後繼的對象。HashMap對象數組數據被替換

private static HashMap <Integer, node> peerList = new HashMap<Integer, node>(); 

public void generateFingerTable (int node_position) { 

      chordSize = chord.initChordSize;   
      chord chord = new chord(); 

     //create new node and add to map 
     node newPeer = new node(); 
     peerList.put(node_position, newPeer); 

     for (int i=0; i<chordSize; i++) { 

      int temp = i+1; 

      newPeer.index = new int [chordSize]; 
      newPeer.successor = new int [chordSize]; 

      int temp1 = node_position + (int)Math.pow(2, temp-1) % chord.getChordSize(); 

      peerList.get(node_position).index[i] = temp;     
      peerList.get(node_position).successor[i] = temp1; 

      System.out.println ("Index: " + newPeer.index[i] + "\n" + "Successor: " + 
        newPeer.successor[i]);   
     } 
} 

public void printFingerTable() { 

     for (Map.Entry<Integer, node> m : peerList.entrySet()) { 
      System.out.println ("Peer " + m.getKey() + " with Index: " + m.getValue().getIndex() + " Successor: " + 
            m.getValue().getSuccessor()); 
     } 

當我打印哈希細節,結果表明索引:[0,0,0,0,5],後續:0,0,0,0,16],這意味着先前的添加元素被替換,只有最後一個元素保存在Hashmap中。

預期結果應該是索引[1,2,3,4,5],後繼者:[1,2,4,8,16]。 我該如何修改這個數據才能被替換?

+1

你好'HashMap'不會允許重複只要找到重複鍵它將取代與最新的一個。 – Babel

回答

1

您在每次循環初始化indexsuccessor陣列,所以纔有了最後的指數值保持到最後,和其他爲0

你應該循環之前初始化數組。

更改代碼:

public void generateFingerTable (int node_position) { 

     chordSize = chord.initChordSize;   
     chord chord = new chord(); 

     //create new node and add to map 
     node newPeer = new node(); 
     peerList.put(node_position, newPeer); 

     newPeer.index = new int [chordSize]; 
     newPeer.successor = new int [chordSize]; 
     for (int i=0; i<chordSize; i++) { 
      int temp = i+1; 
      int temp1 = node_position + (int)Math.pow(2, temp-1) % chord.getChordSize(); 
      peerList.get(node_position).index[i] = temp;     
      peerList.get(node_position).successor[i] = temp1; 

      System.out.println ("Index: " + newPeer.index[i] + "\n" + "Successor: " + 
        newPeer.successor[i]);   
     } 
} 
+0

謝謝。我設法通過這一改變獲得預期的結果。 – user4914916

0

我認爲你應該使用比HashMap中的不同數據類型或結構包含HashMap不保證秩序。我指出這一點,因爲你的代碼peerList.put(node_position, newPeer);似乎暗示你正在設置你的對象在你的HashMap中的位置,但事實並非如此。我只是這樣說,因爲您只是使用名爲node_postion的變量來鍵入或散列您的數據對象將存放在您的HashMap中的位置。請參閱此鏈接瞭解更多詳情。

Difference between HashMap, LinkedHashMap and TreeMap