2013-01-24 4 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'를 찾았고 첫 번째 것은 소스를 가리킨다. 하지만 두 번째 것은 썬 소스 였고 클릭 할 수있는 링크를 통해 부모 클래스를 찾을 수있었습니다. 여기에서 사용할 수있는 소스를 찾았습니다 : [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을 인수로 사용하는 별도의 유틸리티 메소드를 가질 수 있습니다 (이 경우에는 iterator()을 분명히 input.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'를 서브 클래 싱하는 것은 우습다. –