Javaで独自実装したListの動作が異常に遅い
ListIteratorでaddメソッドを実装しArrayListやLinkedListと速度比較したのですが、独自実装のListIteratorの動作が異常に遅いのです。その理由がわかりません。
ListIteratorをimplementしたMyListItrを作成し、最初にaddを実装しその速度を比較しました。
MyListに格納するオブジェクトはElm型オブジェクトとします。
public class Elm<E> {
public Elm<E> next;
public E data;
public Elm() { }
public Elm(E obj) {
data = obj;
}
@Override
public String toString() {
return data.toString();
}
}
MyListItrの未実装のメソッドは省略して載せます。
import java.util.ListIterator;
public class MyListItr<E> implements ListIterator<E>{
protected Elm<E> cursor;
public Elm<E> temp;
public MyListItr(Elm<E> element, int i) {
super();
if(i<0)throw new IndexOutOfBoundsException();
cursor = element;
}
@Override
public void add(E e) {
Elm<E> n = new Elm<>(cursor.data);
n.next = cursor.next;
cursor.data = e;
cursor.next = n;
cursor = n;
temp = null;
}
}
MyListItrを使用してMyListを作ります。
import java.util.AbstractSequentialList;
import java.util.ListIterator;
public class MyList<E> extends AbstractSequentialList<E> {
public Elm<E> element;
public MyList(){
super();
element = new Elm<E>();
}
@Override
public ListIterator<E> listIterator(int arg) {
return new MyListItr<E>(element,arg);
}
@Override
public int size() {
return size1(element);
}
private int size1(Elm<E> e) {
if(e.next == null) return 0;
return size1(e.next)+1;
}
}
このMyListに50000個のElmをaddしていくと15秒近くかかります。ArrayListやLinkedListより1000倍遅いです。どうにかして少しでも早くしたいのですがなにかいい方法はないでしょうか。何故遅いのかよくわかりません。 よろしくお願い致します。