2013-10-04 141 views
-2

我搜索了互聯網,我無法找到我的問題的答案。我正在編寫我自己的數組列表結構。我希望使它成爲一個有序的數組,它將接收一個來自聯繫人類的對象,並按姓氏排序。我有這個到目前爲止,但我不能管理如何做add()方法。與可比較的Java ArrayList

public class SortedArrayList <E extends Comparable<E>> implements SortedList<E> { 
private int currentSize; 

private E elements[]; 



@SuppressWarnings("unchecked") 
public SortedArrayList(int initialCapacity){ 
    if(initialCapacity < 1){ 
     throw new IllegalArgumentException("Need at least one element"); 
    } 

    this.currentSize = 0; 
    this.elements = (E[]) new Object[initialCapacity]; 

} 

@Override 
public Iterator<E> iterator() { 
    // TODO Auto-generated method stub 
    return new ListIterator<E>(); 
} 

@Override 
public boolean add(E obj) { 


    if(obj == null){ 
     throw new IllegalArgumentException("object cannot be null."); 
    } 

    if(this.currentSize == this.elements.length){ 
     reAllocate(); 
    } 
    E temp[]; 
    temp = elements; 
    for(int i=0; i<= this.currentSize; i++){ 

      //if(obj.compareTo(elements[i]) < 0){ 
       //int target =i; 
       //elements[i+1] = temp[i]; 
       //elements[target] = obj; 
       //break; 

      } 


    } 
    this.elements[this.currentSize++] = obj;   




    return true; 
} 
+0

如果您告訴我「E」代表哪個類並顯示其結構,我可以提出更好的方法。 –

+0

看看如何使用'Arrays.binarySearch'來確定插入應該發生的元素[]中的確切索引,然後編輯類似於'java.util.ArrayList'內發生的數組。 – cambecc

+0

E將是來自Class聯繫人的姓氏(字符串)。 –

回答

0

你可以這樣做:

在此基礎上這是resamble喜歡你的E級,你想要做一些整理。

public class Customer implements Comparable<Customer>{ 

private String fname; 
private String lname; 

public String getFname() { 
    return fname; 
} 
public void setFname(String fname) { 
    this.fname = fname; 
} 
public String getLname() { 
    return lname; 
} 
public void setLname(String lname) { 
    this.lname = lname; 
} 

@Override 
public int compareTo(Customer o) { 
    return this.lname.compareTo(o.lname); 
} 

} 

這是你的排序列表類:

public class SortedList{ 

List<Customer> custList = null; 
public SortedList() { 
    custList = new ArrayList<Customer>(); 
} 

public Iterator<Customer> iterator(){ 
    return custList.iterator(); 
} 

public void add(Customer c){ 
    custList.add(c); 
    Customer[] cust= (Customer[]) custList.toArray(); 
    Arrays.sort(cust); 
    custList = Arrays.asList(cust); 
} 
} 

現在只要您調用add方法,這將增加顧客進currentList,每個姓氏排序的。

希望這可以幫助你。