Java ArrayList具有可比性

时间:2013-10-04 03:59:57

标签: java arraylist

我搜索了互联网,但我无法找到问题的答案。我正在编写自己的arraylist结构。我希望使它成为一个排序数组,它将从联系人类接收一个对象,以按姓氏排序。到目前为止,我有这个,但我不能管理如何做add()方法。

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;
}

2 个答案:

答案 0 :(得分:0)

您正在寻找的是,您可以使用Apache Commons BeanUtils BeanComparator来完成。

看看这个example

检查此SO:Comparator vs Apache BeanComparator

答案 1 :(得分:0)

你可以这样做:

这就像你的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);
}

}

这是你的SortedList类:

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方法时,它都会将customer添加到currentList中并按姓氏排序。

希望这会对你有所帮助。