Я новичок в Java и OOP, предыдущий язык, который я узнал, будучи C. Я пытаюсь создать Связанный список, который расширяет AbstractList и что позволяет использовать функцию Collections.sort(). Проблема в том, что когда я вызываю функцию Collections.sort(), я получаю исключение nullPointerException. Я предполагаю, что исключение связано с тем, что последний узел в моем списке является нулевым (так что я могу узнать, где заканчивается список).реализация Java Linked List (из AbstractList) дает nullPointerException в Collections.sort
class Node
{
Object o;
Node next;
public Node(Object n)
{
o = n;
next = null;
}
}
class LinkList extends AbstractList
{
Comparator c;
public Node head, last;
public LinkList(Comparator c)
{
this.c = c;
head = null;
last = null;
}
@Override
public boolean add(Object a)
{
Node t = new Node(a);
if(last == null)
{
head = t;
last = t;
last.next = null;
}
else //thanks, hyde
if(last != null)
{
last.next = t;
last = t;
last.next = null;
}
return true;
}
@Override
public Object get(int a)
{
Node it = head;
int contor = 0;
while(it!=null && contor<a)
{
it = it.next;
}
if(it!=null)
{
return it;
}
else
return null;
}
@Override
public Object set(int i, Object a)
{
Node it = head;
int contor = 0;
Node aux;
while(it!=null && contor<i)
{
it = it.next;
}
if(it!=null)
{
aux = it;
it.o = a;
// Collections.sort(this,c);
return aux;
}
else
return null;
}
@Override
public int size()
{
Node it = head;
int contor = 0;
while(it!=null)
{
contor++;
it = it.next;
}
return contor;
}
@Override
public int indexOf(Object a)
{
Node it = head;
int contor = 0;
while(it!=null && it.o.equals(a)==false)
{
it = it.next;
contor++;
}
if(it!=null)
{
return contor;
}
else
return -1;
}
}
public class Test
{
public static void main(String args[])
{
LinkList lista = new LinkList(new Comparator(){
@Override
public int compare(Object o1, Object o2)
{
int s1 = (int) o1;
int s2 = (int) o2;
return s2-s1;
}
});
lista.add(2);
lista.add(3);
Collections.sort(lista); //this is line 156
System.out.println(lista.size());
}
}
В принципе, я добавить два элемента, и я стараюсь, чтобы отсортировать список, и я получаю NullPointerException. Это очень расстраивает, потому что я не контролирую функцию сортировки.
Exception in thread "main" java.lang.NullPointerException
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at java.util.Collections.sort(Collections.java:155)
at Ex6.main(Ex6.java:156)
Java Result: 1
Я не смотрел исходный код 'java.util.ComparableTimSort', но почему-то я не думаю, что он сможет работать, просто называя' add'. Пожалуйста, покажите больше своих методов. –
Ваш метод добавления добавляет первый узел дважды .... Используйте * else *. – hyde
@RobinGreen: добавлены остальные методы. –