2011-09-12 6 views
0

배열 및 제네릭을 사용하여 목록을 구현하려고합니다. 나는 일반 목록에 값을 삽입하는 방법에 대해 고민하고있다. 스캐너의 nextXXX 변형은 특정 유형을 예상하지만 런타임에만 유형을 알고 있습니다.배열을 사용하여 목록 구현

class Arraylist<T> 
{ 
    static Scanner input = new Scanner(System.in); 
    static T list[]; 
    static int top = -1; 

    public static void displaymenu() 
    { 
     int choice; 
     do { 
      // get choice from user 
      switch (choice) { 
      case 1: 
       list = createlist(); 
       break; 
      case 2: 
       insertnode(); 
       break; 
      // ........ 
      } 
     } while (true); 
    } 

    public static Object[] createlist() 
    { 
     list = new T[LIST_SIZE]; 
     return list; 
    } 

    public static void insertnode() 
    { 
     T o; 
     top++; 
     out.println("Enter the value to insert:"); 
     // o = user's input. I'm confused here??? 
    } 
} 

감사합니다.

+1

우리는 어떤 들여 쓰기를 할 수 있습니까? – NullUserException

+1

여기에서 성취하려는 것은 무엇입니까? 사용자가 일반 데이터를 입력 할 것으로 기대할 수는 없으며 예상 할 수있는 유형을 알고 있어야하며 (각 유형을 파싱하는 방법을 알아야합니다.) 모든 유형을 구문 분석하는 방법 인 경우에만 가능합니다. T를 항상 파싱 할 수있는 것으로 제한하지 않는 한, 당신은 그렇지 않습니다.) – sinelaw

+0

입력은 대개 String으로 수신됩니다. 거기에서 프로그램 논리는 필요한 경우 숫자 값으로 변환을 시도 할 수 있습니다. –

답변

2

어떻게 이런 일에 대해 :

public class ArrayList<T> { 
    private T list[]; 
    private int last; 
    public ArrayList() { 
     list = (T[])new Object[10]; 
    } 
    public void add(T elem) { 
     if(last < list.length) 
      list[last++] = elem; 
     else { 
      T newList[] = (T[])new Object[list.length*2]; 
      System.arraycopy(list, 0, newList, 0, list.length); 
      list = newList; 
      list[last++] = elem; 
     } 
    } 
    public String toString() { 
     StringBuilder sb = new StringBuilder(); 
     sb.append('['); 
     for(int i = 0; i < last; i++) { 
      sb.append(list[i].toString()+","); 
     } 
     sb.replace(sb.length()-1, sb.length(), ""); 
     sb.append(']'); 
     return sb.toString(); 
    } 

    public static void main(String[] args) { 
     ArrayList<String> stringList = new ArrayList<String>(); 
     stringList.add("Hello"); 
     stringList.add("World"); 
     stringList.add("Foo"); 
     System.out.println(stringList); 
    } 
} 
+0

은 C++ 템플릿과 유사한 제네릭입니까? 내가 왜 할 수 없는지 궁금하다. T [] list = new T [10]; – John

+0

John, Java는 제네릭 형식에 대해 형식 지우기가 있습니다 (http://stackoverflow.com/questions/2927391/whats-the-reason-i-cant-create-generic-array-types-in-java 및 여기 참조). http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation – sinelaw

+0

개체 배열을 만드는 이유는 무엇입니까 ....... –

관련 문제