2013-09-23 70 views
0

我正在使用java中的Tree Set來添加一些對象。每個對象都是具有不同屬性的信號。每次有新信號出現,我都會設置對象的某些屬性(信號)並將其添加到設置中,信號可能會多次出現。對於信號我維護一個列表,我存儲的信號名稱,當我發出信號時,我檢查信號是否在列表中如果它不在列表中,我只是添加一個新的對象到我的設置,但如果信號是在列表中,我從集合中獲取信號並修改其中的一些屬性,刪除信號並添加一個新的信號。刪除一個對象並在TreeSet中添加另一個對象

問題是,當我第二次或第三次發出信號時,它不會刪除舊信號,並保留具有修改屬性的所有相同信號的發生。

這裏是我的代碼

SortedSet<Signal> set = new TreeSet<Signal>(); 

ArrayList<String> messages = new ArrayList<String>(); 

    //If the Message is new one    
      if(!messages.contains(messageName)){ 
       //System.out.println("I am new signal"); 
       //Add the new Message in Message List 
       messages.add(messageName); 

       //Create Object of Message to be stored in Set 
       signal = new Signal(); 
       signal.setSource(messageSource); 
       signal.setName(messageName); 
       if(messageSource.equals("egdci") || messageSource.equals("ugdci")) 
        signal.setComponent(egdci_ugdci_msgComponent); 
       else 
        signal.setComponent(messageComponent); 
       signal.setOccurance(messageCounter); 
       signal.setSize(messageContent.length); 
       signal.setBandwidth(0F); 

       //Add the new Message Object in the Set 
       set.add(signal); 
      }    
      //If Message already exists in the list 
      else{ 
       //System.out.println("I am old one"); 
       Iterator<Signal> iterator = set.iterator(); 
       while(iterator.hasNext()) { 
        signal = (Signal)iterator.next(); 
        if(signal.getName().equalsIgnoreCase(messageName)){ 
         System.out.println("I am here"); 
         int occurance = signal.getOccurance() + 1; 
         int size = occurance * messageContent.length; 
         float bandwidth = 0F;       
         set.remove(signal); 

         signal = new Signal(); 
         signal.setSource(messageSource); 
         signal.setName(messageName); 
         if(messageSource.equals("egdci") || messageSource.equals("ugdci")) 
          signal.setComponent(egdci_ugdci_msgComponent); 
         else 
          signal.setComponent(messageComponent); 
         signal.setOccurance(occurance); 
         signal.setSize(size); 
         signal.setBandwidth(bandwidth); 

         //Add the new Message Object in the Set 
         set.add(signal); 
        }       
       } 
      } 

    writeToCSV(signal , writer); 

更多了我嘗試的信號,次數的價值越高的次數的基礎上的文件在我的信號進行排序,在頂部應該在文件。

這裏是Signal.java我的compareTo的代碼(我用的樹集合首次所以不知道如何實現我的comapreTo)

@Override 
    public int compareTo(Signal signal) { 
     int thisOccurance = this.getOccurance(); 
     return thisOccurance.compareTo(signal.getOccurance()); 
    } 

任何幫助將高度讚賞...

在此先感謝

回答

1

如果問題只刪除舊的信號,您可以使用與刪除:

iterator.remove(); 

一旦結束,您可以創建新的信號並將其添加到設置中。

您else條件應該是這樣的:

else { 
     // System.out.println("I am old one"); 
     final Iterator<Signal> iterator = set.iterator(); 
     boolean deleted = false; 
     while (iterator.hasNext()) { 
      signal = (Signal)iterator.next(); 
      if(signal.getName().equalsIgnoreCase(messageName)){ 
       iterator.remove(); 
       deleted = true; 
       break; 
      } 
     } 
     if(delted){ 
      int occurance = signal.getOccurance() + 1; 
      int size = occurance * messageContent.length; 
      float bandwidth = 0F;    

      signal = new Signal(); 
      signal.setSource(messageSource); 
      signal.setName(messageName); 
      if(messageSource.equals("egdci") || messageSource.equals("ugdci")) 
       signal.setComponent(egdci_ugdci_msgComponent); 
      else 
       signal.setComponent(messageComponent); 
      signal.setOccurance(occurance); 
      signal.setSize(size); 
      signal.setBandwidth(bandwidth); 

      //Add the new Message Object in the Set 
      set.add(signal); 
     } 
    } 
+0

在我else條件我遍歷我的組發現我在尋找信號並刪除它從一組是它不這樣做的正確方法?請看看我的代碼 – Wearybands

+0

我看過你的代碼。你在改變設置結構時,你應該使用Iterator「remove」方法去除一個元素(然後如果你喜歡打破這個時間)。 一旦你完成了,你可以添加新的信號。 –

+0

沒有得到您的觀點您可以通過編輯我的代碼來顯示我嗎? – Wearybands

相關問題