2011-09-12 44 views
0

我試圖用數組和泛型實現列表。我堅持如何將值插入到通用列表中。 Scanner的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

輸入通常以字符串形式接收。從那裏,如果需要,程序邏輯可以嘗試轉換爲某個數值。 –

回答

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和here: http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation – sinelaw

+0

什麼是創建對象數組的原因是10 ....... –