2013-01-24 27 views
1

我已經實現了一個存儲Linkedlist中的集合的程序。當我打印鏈表時,例如,我得到了[1,2,3,4,5]LinkedList toString()

我想要的是將方括號改爲括號,例如'{'&'}'

我不能使用字符串操作,所以我必須重寫toString方法。

我不知道如何做到這一點,而不是事實我知道我必須創建一個子類。這是困擾我的方法本身。

public class outputSets 
    {  
     @SuppressWarnings({ "unchecked", "rawtypes", "unused" }) 
     public static void main(String args[]) 
     {  
     LinkedList x0 = new LinkedList(); 
     LinkedList x1 = new LinkedList(); 
     LinkedList x2 = new LinkedList(); 
     LinkedList x3 = new LinkedList(); 
     LinkedList x4 = new LinkedList(); 
     LinkedList x5 = new LinkedList(); 
     LinkedList x6 = new LinkedList(); 

     x0.add(new Integer(8)); 

     for(int i=1; i<8; i++) 
     { 
      x1.add(new Integer(i)); 
     } 

     x1.add((x0.getFirst())); 

     x2.addAll(x1); 
     x2.add(new Pair(1, x1)); 

     x3.add(new Pair(x2,x1)); 

     //x4.addAll(tree.union(x3, x2)); 

     //x5.add(tree.difference(x4, x1)); 

     //x6.add(tree.intersection(x4, x1)); 
     /* 
     Iterator i0 = x0.listIterator(); 
     Iterator i1 = x0.listIterator(); 
     Iterator i2 = x0.listIterator(); 
     Iterator i3 = x0.listIterator(); 
     Iterator i4 = x0.listIterator(); 
     Iterator i5 = x0.listIterator(); 
     Iterator i6 = x0.listIterator(); 
     */ 

     System.out.print(x0.getFirst()); 
     System.out.println(); 
     SetArray(x1); 
     System.out.println(); 
     SetArray(x2); 

     System.out.println(); 
     System.out.println(); 
     } 


    @SuppressWarnings("rawtypes") 
    private static void SetArray(LinkedList x0) 
    { 
     for(int index=0; index < x0.size() ; index++) 
     { 
      if (index == 0) 
      { 
       System.out.print(x0.get(index)); 
      } 
      else 
      { 
       System.out.print(", " + 
         "" + x0.get(index)); 
      } 
     } 

    } 
} 
+0

鏈表是一個很差的集合實現,因爲添加一個新元素,刪除一個元素,檢查集包含都是線性時間操作。也許你應該使用散列表或樹來代替(或者使用基於散列表和樹的Java內置集合實現之一)。 –

+0

我使用了'java linkedlist source',第一個指向了源代碼。但第二個是Sun的源,並有可點擊的鏈接來查找父類。我發現你可以在這裏使用的源代碼:[AbstractCollection.java](http://www.docjar.com/html/api/java/util/AbstractCollection.java.html) –

+0

你不能使用字符串操作的原因是什麼? –

回答

3

輸出是完全依賴於AbstractCollection.toString()的執行 - 其中LinkedList(以及除地圖以外的大多數其他集合)繼承。此實現看起來像這樣(略簡體):

public String toString() { 
    Iterator<E> it = iterator(); 
    if (! it.hasNext()) 
     return "[]"; 

    StringBuilder sb = new StringBuilder(); 
    sb.append('['); 
    for (;;) { 
     E e = it.next(); 
     sb.append(e); 
     if (! it.hasNext()) 
      return sb.append(']').toString(); 
     sb.append(", "); 
    } 
} 

有了這個作爲一個準則應該是非常簡單的爲您打造自己的實現不包括方括號。您可以創建自己的集合,覆蓋toString()或者有一個單獨的實用方法,將您的LinkedList input作爲參數(在這種情況下,顯然會用input.iterator()代替iterator())。

+0

這幫助我soooooo非常感謝你! – blairmeister

1

創建一個類,extends LinkedList,幷包含這樣的方法:

@Override 
public String toString() { 

} 

該方法可訪問列表項是這樣的:

Iterator<Integer> it = this.iterator(); 

while(it.hasNext()) { 
    Integer nextItem = it.next(); 
} 
+0

不要告訴我.. ..我沒有給出所有的代碼,但應該有足夠的信息在這裏得到去 – cowls

+0

哦,沒關係,我看到你的編輯 – Doorknob

+0

在我看來,擴展LinkedList是有點矯枉過正。你不這麼認爲嗎? –

4

您也可以創建一個幫助器方法,該方法將List對象作爲屬性,並返回String與此列表的連接內容。這種方式的遺傳是多餘的。

+0

+1。爲此'子類'LinkedList'只是荒謬的。 –