我搜索了互联网,但我无法找到问题的答案。我正在编写自己的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;
}
答案 0 :(得分:0)
您正在寻找的是,您可以使用Apache Commons BeanUtils BeanComparator来完成。
看看这个example
答案 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中并按姓氏排序。
希望这会对你有所帮助。