2015-10-22 60 views
0
public void enqueue(Packet...packets) 
{ 
    ArrayList<Packet>type1 = new ArrayList(); 
    ArrayList<Packet>type2 = new ArrayList(); 
    boolean t = true; 


    for(Packet packet : packets) 
    { 
     if(packet.getClassType() == t) 
     { 
      type1.add(packet); 
     } 
     else 
     { 
      type2.add(packet); 
     }   
    } 


    if(queue.isEmpty()) 
    { 
     if(type1.isEmpty()) 
     { 
     //DO NOTHING 
     } 
     else 
     { 
     queue.addAll(type1); 
     } 
     if(type2.isEmpty()) 
     { 
     //DO NOTHING 
     } 
     else 
     { 
     queue.addAll(type2); 
     } 
    } 
    else 
    { 

     for(int i = 1 ; i<=queue.size() ; i++) 
     { 
      if (queue.get(i).getClassType() != t) 
      { 
       if(type1.isEmpty()) 
       { 
        // DO NOTHING 
       } 
       else 
       { 
       queue.addAll(i, type1); 
       } 
      } 
     } 
     if(type2.isEmpty()) 
     { 
     // DO NOTHING 
     } 
     else 
     { 
     queue.addAll(type2); 
     } 
    } 
} 

在此代碼中,我得到了具有真類型或fase的分組的ArrayList的ArrayList。在第一階段,我根據他們的類型對這些數據包進行排序。在此之後,我將這些新Arraylists(類型1和類型2)以特定方式添加到另一個數組列表'隊列'中。 我想知道是否,執行此代碼後,ArrayList類型1和類型2再次爲空,或者我應該添加一個函數在我的代碼中刪除後,它們已被存儲在隊列ArrayList中的數據包?將對象添加到另一個陣列列表後,陣列列表是否將爲空

親切的問候

回答

0

當你把你的ArrayList內容到另一個ArrayList中,你是從第一個將數據複製到第二個。所以不,當你這樣做時,你並不是將一個列表中的內容「清空」到另一個列表中。這意味着您的原始數據仍然存在於type1type2 ArrayList中,並且它現在也出現在您的新ArrayList中。因此,如果您想重新使用type1type2 ArrayLists,簡單的方法是簡單地重新初始化它們,它將用新的(空的)ArrayList對象覆蓋引用。你會這樣做...

type1 = new ArrayList<>(); 
type2 = new ArrayList<>(); 
+0

嗨,謝謝你的迴應!這不是我在我的功能的第一行做什麼?如果我在一個循環中使用這個函數,並讓它執行100次,那麼type1和type2在每個循環的開始時是不是空的? – StudentX

相關問題