使用可比排序数组
Using comparable to sort array
我正在编写一个程序,用户在其中添加一组整数,我必须使用可比对象对数组进行排序。以下是我的尝试方式:
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 方法的想法是比较每个添加的项目(添加到集合中的数量)。如果该项小于theData[i]的值,则将theData[i]向前移动一个点到theData[i+1],并将该项放入theData[i]。
如果大于theData[i]中的值,则将该项放入i+1中,将较小的值留在元素i中。
我已经尝试重写我的循环,使用嵌套循环遍历其余元素,但我的逻辑一定有问题,因为我没有得到任何更好的结果。
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);
}
我正在编写一个程序,用户在其中添加一组整数,我必须使用可比对象对数组进行排序。以下是我的尝试方式:
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 方法的想法是比较每个添加的项目(添加到集合中的数量)。如果该项小于theData[i]的值,则将theData[i]向前移动一个点到theData[i+1],并将该项放入theData[i]。
如果大于theData[i]中的值,则将该项放入i+1中,将较小的值留在元素i中。
我已经尝试重写我的循环,使用嵌套循环遍历其余元素,但我的逻辑一定有问题,因为我没有得到任何更好的结果。
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);
}