2016-06-23 6 views
1

を示しています私はこれらに追加するマージとスプリット方式を作成しようとしています:マージ2つの順序付けられていない一般的な配列は

public interface ArrayListADT<T> extends Cloneable { 
public boolean isEmpty(); 
public boolean isFull(); 
public int listSize(); 
public int maxListSize(); 
public void print(); 
public Object clone(); 
public boolean isItemAtEqual(int location, T item); 
public void insertAt(int location, T insertItem); 
public void insertEnd(T insertItem); 
public void removeAt(int location); 
public T retrieveAt(int location); 
public void replaceAt(int location, T repItem); 
public void clearList(); 
public int search(T searchItem); 
public void remove(T removeItem); 
} 

マージ方法は、第三に2つの順不同配列リストを連結する必要があります。 2つのリストに共通するキーはありません。 3番目のリストは、リスト1と2のすべての項目を持つ必要があります。秩序も維持されるべきです。

public <T extends Comparable<T>> UnorderedArrayList<T>  merge(UnorderedArrayList<T> list, UnorderedArrayList<T> list2){ 
for (int index2 = 0; index2 < list2.listSize(); index2++) { 
    for (int index1 = 0; ; index1++) { 
     if (index1 == list.listSize() || list.retrieveAt(index1) > list2.retrieveAt(index2)) { 
      list.add(index1, list2.get(index2)); 
      break; 

私はcompareToメソッドを実装する必要がありますか?

スプリット方法については、ここにあります。

public void split(UnorderedArrayList list, UnorderedArrayList list2, UnorderedArrayList list3, int key) { 
int num = 0; 
list.clearList(); 
list2.clearList(); 
for(int i = 0;i < list3.length; i++) { 
    num = list3.retrieveAt(i); 
    if(num <= key) 
    list.insertEnd(num); 
    else 
    list2.insertEnd(num); 

私はnum = list3.retrieveAt(i); エラーのエラーを取得しています。オブジェクトは、intに変換することはできません。それをintに型キャストする必要がありますか? (であることが必要であるT

+0

'UnorderedArrayList'とは何ですか?それは 'ArrayListADT'ですか? –

+0

これは 'ArrayListClass'から拡張されたクラスで、' ArrayListADT'を実装する抽象クラスです。 @TJ – DJ2

答えて

0

Should I implement a compareTo method?

まあ、Comparableは既に1を持っています。だから、はい、それを使用する:

if (index1 == list.listSize() || list.retrieveAt(index1).compareTo(list2.retrieveAt(index2)) > 0) { 

あなたはTとして使用するクラスを書いている場合は、[はい、あなたはComparable契約を満たすためにcompareToを実装する必要があります。

関連する問題