【发布时间】:2014-06-27 07:10:33
【问题描述】:
我必须在 java 中创建自己的列表。要插入的元素(Person 元素)必须排序(从低到高)。 所以我创建了一个方法 compareTo 来检查插入的人的名字。 问题在于插入方法。我写了这段代码:
public boolean insert(Person p){
PersonListElement element = new PersonListElement(p);
boolean inserted = false;
if(containsElement(p) == true){
inserted = false;
return inserted;
}
if(head == null){
head = element;
size = size + 1;
inserted = true;
return inserted;
}
PersonListElement position = head;
PersonListElement prev = null;
while(position != null){
if(position.getValue().compareTo(element.getValue()) < 0){
if(prev != null){
prev.setNext(element);
element.setNext(position);
inserted = true;
position = null;
}
prev = position;
position = position.getNext(); //here i get pointerException prob.
}
}
if(inserted == false && prev != null){
prev.setNext(element);
inserted = true;
}
size = size + 1;
return inserted;
}
这是我的方法,但还没有完成。你能帮帮我吗?
编辑:
我也尝试了一种删除元素的方法。我认为我的代码适用于空列表、1 大小列表以及元素不在列表末尾的情况。但我不知道我的方法是否删除了最后一个元素:
public boolean delete(Person p){
boolean deleted = false;
if(size == 0){
deleted = false;
return deleted;
}
if(size == 1 && head.getValue().compareTo(p) == 0){
head = null;
deleted = true;
return deleted;
}
PersonListElement current = head;
PersonListElement prev = null;
PersonListElement next = head;
next = next.getNext();
while(next != null){
if(current.getValue().compareTo(p) == 0){
prev.setNext(next);
deleted = true;
return deleted;
}
prev = current;
current.getNext();
next.getNext();
}
return deleted;
}
我用这个类测试了我的代码:
class SortList
{
public static void main(String args[]){
SortedList list = new SortedList();
Person a = new Person("Alice", 10);
list.insert(a);
a = new Person("Al", 20);
list.insert(a);
a = new Person("Bo", 90);
list.insert(a);
p = new Person("Cin", 3);
list.insert(a);
System.out.println(list);
}
}
【问题讨论】:
-
你班上的其他人是什么样子的?
-
不确定您的分配是否允许,但 Java 有一些不错的 baked in features 用于排序,并且使用您的 compareTo 方法,您已经成功了一半。
标签: java list class sorting insert