2013-01-21 125 views
0

我有一個泛型類應該創建一個數組中存儲的可比較集合。可比公司和仿製藥的工作方式我很不清楚。添加到泛型集合

public class OrderedCollection<T extends Comparable<? super T>> 
{ 
private T collection[]; // the collection 
private int size, tempValue; // how many elements currently stored 

/** 
* Constructor allocates array and initializes size 
* @param size the number of elements stored 
*/ 
    public OrderedCollection (int capacity) 
    { 
    collection = (T[]) new Comparable[capacity]; 
    size = 0;  
    } 
} 

首先,什麼樣的集合是收集(排列,列表等)。它永遠不會顯式實例化爲新的Array [],所以我很好奇它應該如何創建一個數組。其次,需要一種插入指定值(用於測試目的,我已經使用'5')並將其分配給集合[0]的方法。但是,當我返回集合[0]時,它返回爲空。這裏是插入方法:

public void insert(T x) 
{ 
    collection[0] = x; 
} 

沒什麼特別的。我將非常感謝一些澄清,爲什麼收集返回null,以及我應該如何去增加指定x價值的集合。

+0

你可以看看[ArrayList的代碼](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/例如ArrayList.java#ArrayList。%3Cinit%3E%28int%29) - 等價構造函數確實:'collection = new Object [capacity];'。通用部分在其他方法中。例如:'public T get(int index)' – assylias

回答

1

正常約定是:

private T[] collection; 

此致是一個C兼容性語法。

public void add(T x) { 
    if (size >= collection.length) 
     throw new IllegalStateException(); 
    collection[size] = x; 
    ++size; 
} 

集合是任何類型集合的接口。實現類是HashTree,ArrayList等。

這是與其他一些語言的區別,即java沒有像JavaScript這樣的少數「集合」類,但有一些接口,有一個可以選擇的實現。所以你必須爲Map選擇HashMap,TreeMap,LinkedHashMap等等。所以在API中你放置了接口,但是實現使用了一些實現的技術優勢。

例如遍歷TreeMap是按鍵排序的。遍歷LinkedHashMap按照插入順序排序。

關於null必須是編程錯誤。

+0

這對我有用。返回null的問題必須與我試圖從中檢索值。 – hanoldaa

1

超出問題集合是什麼(看起來在API中),你發佈的代碼工作得很好。用一些內置的類來實現Comparable(比如Integer或String)......你可以發佈調用insert()方法的代碼嗎?

+0

我基本上只是實現了System.out.println(oc.collection [index]);來自主驅動程序類,但我不得不調用OrderedCollections類中的方法來返回值。現在我只需要計算我將用什麼方法對集合進行排序... =/ – hanoldaa

+0

只需調用Arrays.sort(collection),但要確保在集合中沒有任何空值(或檢查compareTo中的空值)在你的對象實例化的類中實現)。 – fazhool

+0

「但要確保你沒有任何內藏的空洞」,這解釋了它。我之前嘗試過,但在填寫集合之前嘗試對其進行排序。非常感謝幫助=) – hanoldaa