使用与排序数组相当的

时间:2015-10-29 05:43:40

标签: java arrays comparable

我正在编写一个用户添加一组整数的程序,我必须使用类似的方法对数组进行排序。以下是我试图这样做的方法:

public class Set<E extends Comparable<E>> {

String s;
String name;
private static final int INITIAL_CAPACITY = 10;
private E[] theData;
private int size = 0;
private int capacity = INITIAL_CAPACITY;

@SuppressWarnings("unchecked")
public Set() {
    theData = (E[]) new Comparable[capacity];
}

public Set(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public void add(E item) {

    if (size == capacity) {
            reallocate();
        }

        if(size == 0){
            theData[0] = item;
            size++;
        }

        for (int i = 0; i < size; i++) {
            int result = item.compareTo(theData[i]);

            if (result < 0){
                theData[i+1] = theData[i];
                theData[i] = item;
                size++;
            }

            if (result > 0){
                theData[i+1] = item;

            }
        }




}

public E get(int index) {
    if (index < 0 || index >= size) {
        throw new ArrayIndexOutOfBoundsException(index);
    }
    return theData[index];
}

public int size() {
    return size;
}

private void reallocate() {
    capacity = 2 * capacity;
    theData = Arrays.copyOf(theData, capacity);
}

}

我对add方法的想法是比较每个添加的项目(添加到集合中的数字)。如果项目小于数据[i]的值,则将数据[i]转移到数据[i + 1]中,并将项目放在数据[i]中。

如果它大于Data [i]中的值,则将项目放在i + 1中,并将较低的值保留在元素i中。

我尝试重写我的循环,使用嵌套循环迭代其余的元素,但我的逻辑中必须关闭一些东西,因为我没有得到任何更好的结果。

1 个答案:

答案 0 :(得分:0)

每次add方法中的“size”初始化为“0”,因此你的for循环不起作用,不进行比较。 请尝试使用"for(int i=0; i<theData.length; i++)"。 但之后您可能会遇到NullPointerException,因为您已将初始容量初始化为10。 写一个单独的比较方法可能有用..

public int compare(E o1, E o2) {
       return o1.compareTo(o2);
}