2010-09-16 5 views
0

Veuillez vous référer au code ci-dessous. Les clés "H_0000001" et "H_0000002" dans les hashmaps HstTime et HstName sont remplacées par d'autres clés uniques. "H_000002" est remplacé par "H_00000010" et "H_0000001" est remplacé par "H_00000012".La clé unique Java HashMap est écrasée - veuillez lire le code et les conseils

package JavaTutes; 

import java.util.*; 

public class TCProcessData 
{ 
     String Unit1HST1ID = "H_0000001"; 
     String Unit1HST2ID = "H_0000002"; 
     String Unit1HST3ID = "H_0000003"; 
     String Unit1HST4ID = "H_0000004"; 
     String Unit2HST1ID = "H_0000005"; 
     String Unit2HST2ID = "H_0000006"; 
     String Unit3HST1ID = "H_0000007"; 
     String Unit3HST2ID = "H_0000008"; 
     String Unit3HST3ID = "H_0000009"; 
     String Unit3HST4ID = "H_00000010"; 
     String Unit3HST5ID = "H_00000011"; 
     String Unit3HST6ID = "H_00000012"; 
     String Unit4HST1ID = "H_00000013"; 
     String Unit4HST2ID = "H_00000014"; 
     String Unit4HST3ID = "H_00000015"; 
     String Unit4HST4ID = "H_00000016"; 
     String Unit5HST1ID = "H_00000017"; 
     String Unit5HST2ID = "H_00000018"; 
     String Unit5HST3ID = "H_00000019"; 
     String Unit5HST4ID = "H_00000020"; 
     String Unit5HST5ID = "H_00000021"; 
     String Unit5HST6ID = "H_00000022"; 
     String Unit5HST7ID = "H_00000023"; 
     String Unit5HST8ID = "H_00000024"; 
     String Unit5HST9ID = "H_00000025"; 
     String Unit6HST1ID = "H_00000026"; 
     String Unit6HST2ID = "H_00000027"; 
     String Unit6HST3ID = "H_00000028"; 
     String Unit6HST4ID = "H_00000029"; 

     String Unit1HST1Name = "Some Name 1"; 
     String Unit1HST2Name = "Some Name 2"; 
     String Unit1HST3Name = "Some Name 3"; 
     String Unit1HST4Name = "Some Name 4"; 
     String Unit2HST1Name = "Some Name 5"; 
     String Unit2HST2Name = "Some Name 6"; 
     String Unit3HST1Name = "Some Name 7"; 
     String Unit3HST2Name = "Some Name 8"; 
     String Unit3HST3Name = "Some Name 9"; 
     String Unit3HST4Name = "Some Name 10"; 
     String Unit3HST5Name = "Some Name 11"; 
     String Unit3HST6Name = "Some Name 12"; 
     String Unit4HST1Name = "Some Name 13"; 
     String Unit4HST2Name = "Some Name 14"; 
     String Unit4HST3Name = "Some Name 15"; 
     String Unit4HST4Name = "Some Name 16"; 
     String Unit5HST1Name = "Some Name 17"; 
     String Unit5HST2Name = "Some Name 18"; 
     String Unit5HST3Name = "Some Name 19"; 
     String Unit5HST4Name = "Some Name 20"; 
     String Unit5HST5Name = "Some Name 21"; 
     String Unit5HST6Name = "Some Name 22"; 
     String Unit5HST7Name = "Some Name 23"; 
     String Unit5HST8Name = "Some Name 24"; 
     String Unit5HST9Name = "Some Name 25"; 
     String Unit6HST1Name = "Some Name 26"; 
     String Unit6HST2Name = "Some Name 27"; 
     String Unit6HST3Name = "Some Name 28"; 
     String Unit6HST4Name = "Some Name 29"; 

     String Unit1HST1Time = "4.57"; 
     String Unit1HST2Time = "2.34"; 
     String Unit1HST3Time = "1.56"; 
     String Unit1HST4Time = "4.23"; 
     String Unit2HST1Time = "2.78"; 
     String Unit2HST2Time = "4.21"; 
     String Unit3HST1Time = "4.34"; 
     String Unit3HST2Time = "3.45"; 
     String Unit3HST3Time = "2.56"; 
     String Unit3HST4Time = "6.67"; 
     String Unit3HST5Time = "7.78"; 
     String Unit3HST6Time = "5.89"; 
     String Unit4HST1Time = "2.12"; 
     String Unit4HST2Time = "1.23"; 
     String Unit4HST3Time = "3.34"; 
     String Unit4HST4Time = "4.45"; 
     String Unit5HST1Time = "4.56"; 
     String Unit5HST2Time = "5.67"; 
     String Unit5HST3Time = "3.78"; 
     String Unit5HST4Time = "3.89"; 
     String Unit5HST5Time = "2.89"; 
     String Unit5HST6Time = "2.78"; 
     String Unit5HST7Time = "6.12"; 
     String Unit5HST8Time = "7.23"; 
     String Unit5HST9Time = "3.56"; 
     String Unit6HST1Time = "4.67"; 
     String Unit6HST2Time = "3.78"; 
     String Unit6HST3Time = "3.78"; 
     String Unit6HST4Time = "4.12"; 

     String Unit1ID = "U_000001"; 
     String Unit2ID = "U_000002"; 
     String Unit3ID = "U_000003"; 
     String Unit4ID = "U_000004"; 
     String Unit5ID = "U_000005"; 
     String Unit6ID = "U_000006"; 

     String Unit1Name = "Some Unit1"; 
     String Unit2Name = "Some Unit2"; 
     String Unit3Name = "Some Unit3"; 
     String Unit4Name = "Some Unit4"; 
     String Unit5Name = "Some Unit5"; 
     String Unit6Name = "Some Unit6"; 

     String[] unitItemID = {Unit1ID, Unit2ID, Unit3ID, 
       Unit4ID, Unit5ID, Unit6ID}; 
     String[] unitItemName = {Unit1Name, Unit2Name, 
      Unit3Name, Unit4Name, Unit5Name, Unit6Name}; 

     private String[] listOfUnits = null; 
     private String[] hstIDs = null; 
     private Double[] hstTimes = null; 
     private Double unitTime = 0.00; 
     String unitID = null; 
     private double hstTime = 0.00; 
     //hashmap key - hstID. value is unit id 
     private static HashMap<String, String[]> UnitChildren = new HashMap<String, String[]>(); 
     //hashmap key - hst id,value is hst time 
     private HashMap<String, Double> HstTime = new HashMap<String, Double>(); 
     //hashmap key - hst id,value is hst name 
     private HashMap<String, String> HstName = new HashMap<String, String>();  

     public TCProcessData() 
     { 

      String[] unit1HSTID = {this.Unit1HST1ID, this.Unit1HST2ID, 
        this.Unit1HST3ID, this.Unit1HST4ID}; 
      String[] unit2HSTID = {this.Unit2HST1ID, this.Unit2HST2ID}; 
      String[] unit3HSTID = {this.Unit3HST1ID, this.Unit3HST2ID, 
        this.Unit3HST3ID, this.Unit3HST4ID, this.Unit3HST5ID, this.Unit3HST6ID}; 
      String[] unit4HSTID = {this.Unit4HST1ID, this.Unit4HST2ID, 
        this.Unit4HST3ID, this.Unit4HST4ID}; 
      String[] unit5HSTID = {this.Unit5HST1ID, this.Unit5HST2ID, 
        this.Unit5HST3ID, this.Unit5HST4ID, this.Unit5HST5ID, this.Unit5HST6ID, 
        this.Unit5HST7ID, this.Unit5HST8ID, this.Unit5HST9ID}; 
      String[] unit6HSTID = {this.Unit6HST1ID, this.Unit6HST2ID, 
        this.Unit6HST3ID, this.Unit6HST4ID}; 

      String[] unit1HSTName = {this.Unit1HST1Name, this.Unit1HST2Name, 
        this.Unit1HST3Name, this.Unit1HST4Name}; 
      String[] unit2HSTName = {this.Unit2HST1Name, this.Unit2HST2Name}; 
      String[] unit3HSTName = {this.Unit3HST1Name, this.Unit3HST2Name, 
        this.Unit3HST3Name, this.Unit3HST4Name, this.Unit3HST5Name, this.Unit3HST6Name}; 
      String[] unit4HSTName = {this.Unit4HST1Name, this.Unit4HST2Name, 
        this.Unit4HST3Name, this.Unit4HST4Name}; 
      String[] unit5HSTName = {this.Unit5HST1Name, this.Unit5HST2Name, 
        this.Unit5HST3Name, this.Unit5HST4Name, this.Unit5HST5Name, this.Unit5HST6Name, 
        this.Unit5HST7Name, this.Unit5HST8Name, this.Unit5HST9Name}; 
      String[] unit6HSTName = {this.Unit6HST1Name, this.Unit6HST2Name, 
        this.Unit6HST3Name, this.Unit6HST4Name}; 

      String[] unit1HSTTime = {this.Unit1HST1Time, this.Unit1HST2Time, 
        this.Unit1HST3Time, this.Unit1HST4Time}; 
      String[] unit2HSTTime = {this.Unit2HST1Time, this.Unit2HST2Time}; 
      String[] unit3HSTTime = {this.Unit3HST1Time, this.Unit3HST2Time, 
        this.Unit3HST3Time, this.Unit3HST4Time, this.Unit3HST5Time, this.Unit3HST6Time}; 
      String[] unit4HSTTime = {this.Unit4HST1Time, this.Unit4HST2Time, 
        this.Unit4HST3Time, this.Unit4HST4Time}; 
      String[] unit5HSTTime = {this.Unit5HST1Time, this.Unit5HST2Time, 
        this.Unit5HST3Time, this.Unit5HST4Time, this.Unit5HST5Time, this.Unit5HST6Time, 
        this.Unit5HST7Time, this.Unit5HST8Time, this.Unit5HST9Time}; 
      String[] unit6HSTTime = {this.Unit6HST1Time, this.Unit6HST2Time, 
        this.Unit6HST3Time, this.Unit6HST4Time}; 

         UnitChildren.put(this.Unit1ID, unit1HSTID); 
      for (int i = 0; i<unit1HSTID.length; i++) 
      { 
       hstTime = Double.valueOf(unit1HSTTime[i]); 
       HstTime.put(unit1HSTID[i], hstTime); 
       HstName.put(unit1HSTID[i], unit1HSTName[i]); 
      } 
      UnitChildren.put(Unit2ID, unit2HSTID); 
      for (int i = 0; i<unit2HSTID.length; i++) 
      {   
       hstTime = Double.valueOf(unit2HSTTime[i]); 
       HstTime.put(unit2HSTID[i], hstTime); 
       HstName.put(unit2HSTID[i], unit2HSTName[i]); 
      } 
      UnitChildren.put(Unit3ID, unit3HSTID); 
      for (int i = 0; i<unit3HSTID.length; i++) 
      {   
       hstTime = Double.valueOf(unit3HSTTime[i]); 
       HstTime.put(unit3HSTID[i], hstTime); 
       HstName.put(unit3HSTID[i], unit3HSTName[i]); 
      } 
      UnitChildren.put(Unit4ID, unit4HSTID); 
      for (int i = 0; i<unit4HSTID.length; i++) 
      {   
       hstTime = Double.valueOf(unit4HSTTime[i]); 
       HstTime.put(unit4HSTID[i], hstTime); 
       HstName.put(unit4HSTID[i], unit4HSTName[i]); 
      } 
      UnitChildren.put(Unit5ID, unit5HSTID); 
      for (int i = 0; i<unit5HSTID.length; i++) 
      {   
       hstTime = Double.valueOf(unit5HSTTime[i]); 
       HstTime.put(unit5HSTID[i], hstTime); 
       HstName.put(unit5HSTID[i], unit5HSTName[i]); 
      } 
      UnitChildren.put(Unit6ID, unit6HSTID); 
      for (int i = 0; i<unit6HSTID.length; i++) 
      {   
       hstTime = Double.valueOf(unit6HSTTime[i]); 
       HstTime.put(unit6HSTID[i], hstTime); 
       HstName.put(unit6HSTID[i], unit6HSTName[i]); 
      }  
     } 

    public int getNoOfRows() 
    { 
     return unitItemID.length; 
    } 
    public String[] getUnitIDs() 
    { 
     return unitItemID; 
    } 
    public String getUnitID(int row) 
    { 
     return unitItemID[row]; 
    } 
    public String[] getUnitTitles() 
    { 
     return listOfUnits; 
    } 
    public HashMap<String, String[]> getUnitChildren() 
    { 
     return UnitChildren; 
    } 
    public HashMap<String, Double> getHstTime() 
    { 
     return HstTime; 
    } 
    public HashMap<String, String> getHstName() 
    { 
     return HstName; 
    } 
    public Double getUnitTime(int row) 
    { 
      this.unitID = this.getUnitID(row); 
      hstIDs = this.getUnitChildren().get(unitID); 
      for (int i=0; i<hstIDs.length; i++) 
      { 
       hstTimes[i] = this.getHstTime().get(hstIDs[i]); 
       unitTime = unitTime + hstTimes[i]; 
      } 
      return unitTime;  
    } 
    public static void main(String[] args) 
    { 
     TCProcessData someData = new TCProcessData(); 
     int rows = someData.getNoOfRows(); 
     double unit1time = someData.getUnitTime(0); 
     double unit3time = someData.getUnitTime(2); 
     System.out.println(rows); 
     System.out.println(unit1time); 
     System.out.println(unit3time); 
    } 


} 

Répondre

0

Quand je lance ce code je reçois un NullPointerException parce que vous essayez d'insérer des données dans le tableau hstTimes dans votre méthode getUnitTime, mais vous n'instancier le tableau.

Egalement HstTime contient 29 clés, ce qui correspond au nombre de membres de tous vos tableaux unitnHSTID, donc je ne suis pas sûr du problème que vous voyez.

+0

Bonjour .... Je ne reçois pas l'exception NullPointerException? Aussi oui la taille de hashmap HstTime montre 29 ... ce qui est cohérent mais il ne montre que 27keys et en mode débogage j'ai vu les 2keys que j'ai mentionnés ci-dessus écrasés – akrrs999

+0

Oui..true mais quand j'essaye de récupérer la valeur pour la clé " H_0000001 "en utilisant la méthode getUnitTime - il ne peut pas le trouver? est-ce que je fais quelque chose de mal? .... thx. – akrrs999

+0

Si je commente la ligne 'hstTimes [i] = this.getHstTime(). Get (hstIDs [i]);' et déplacez unitTime' d'une variable d'instance dans la méthode 'getUnitTime' et changez le code d'ajout à' unitTime + = this.getHstTime(). get (hstIDs [i]); 'J'obtiens un résultat de' 12.700000000000001' –

1

Qu'entendez-vous par écrasé? En raison de la façon dont Java calcule les codes de hachage, les paires String que vous mentionnez finiront avec la même valeur de hachage, mais le HashMap gérera ces collisions avec élégance (en faisant de chaque seau une liste chaînée d'entrées, efficacement).

+0

Par écrasé Je veux dire que disons que la clé dans hashmap HstTime à l'index 12 est écrite comme "H_0000001" avec une valeur correspondante de 4.57. Au fur et à mesure que le programme progresse - cette clé est remplacée par la clé "H_00000011" avec une valeur correspondante de 7,78. La clé précédente "H_0000001" n'existe plus dans Hashmap. – akrrs999

+0

je suppose .... j'ai fait une erreur .... qui Jon Freedman a souligné que je n'ai pas regardé la hashmap correctement et manqué sur les valeurs «prochaines» .... – akrrs999

+0

désolé..pointé par Joachim Sauer – akrrs999

Questions connexes