[英]List Interface implementation
我在 class 中創建了一個通用的 class,其工作方式類似於 ArrayList。class 包含一個數組,該數組會根據函數的需求變大或變小。 現在,我必須實現 List 接口並卡在 Iterator 和 ListIterator 上。 當我嘗試實現依賴於 Iterator 或 ListIterator 的方法時,我總是遇到錯誤。 當然,我已經在 inte.net 上進行了搜索,但我想我錯過了一些東西。
public class EviatarList 實現 List, Iterable {
private E[] arr;
private static final int DEFAULT_CAPACITY = 3;
private int index = 0;
private int iteratorIndex = 0;
@Override
public Iterator<E> iterator() {Iterator<E> it = new Iterator<E>() {
@Override
public boolean hasNext() {
return index < arr.length && arr[index + 1] != null;
}
@Override
public E next() {return arr[iteratorIndex++];}
@Override
public void remove(){
E [] arr1 =(E[]) new Object [size()-1];
try {
arr[iteratorIndex] = null;
iteratorIndex--;
index--;
for (int i = 0, j = 0; i < arr.length; i++, j++) {
if (arr[i] != null)
{
arr1[j] = arr[i];
} else{
j--;
}
}
} catch (Exception e)
{
System.out.println(e.getMessage());
}
arr = arr1;
}
};
return it;
}
public ListIterator<E> listIterator() {
ListIterator<E> li = new ListIterator<E>() {
//o(1)
@Override
public boolean hasNext() {
return index < arr.length;
}
//o(1)
@Override
public E next() {
return arr[index++];
}
//o(1)
@Override
public boolean hasPrevious() {
return index > 0;
}
//o(1)
@Override
public E previous() {
return arr[index--];
}
//o(1)
@Override
public int nextIndex() {
return iteratorIndex;
}
//o(1)
@Override
public int previousIndex() {
return iteratorIndex--;
}
// o(n)
@Override
public void remove() {
E[] newArr = (E[]) new Object[arr.length - 1];
index--;
for (int i = 0, j = 0; i < index; i++, j++) {
if (i != iteratorIndex) {
newArr[i] = arr[j];
} else {
j--;
}
}
arr = newArr;
}
對不起,但你的問題有點含糊,所以我無法真正回答。 EviatarList
的實現未顯示但已使用(例如size()
)並且“我一直只收到錯誤”不清楚錯誤的類型(來自使用它的編譯器或運行時,...)。
關於您的實施的一些想法可能有助於更進一步:
List
而不是擴展AbstractList
(這將提供隨時可用的迭代器)?iteratorIndex
必須是Iterator
的 state(也稱為成員),而不是List
的!index
和iteratorIndex
存在一些混淆。 index
有什么區別和作用是什么?ListIterator
擴展Iterator
它將簡化您對兩者使用相同的實現: public Iterator<E> iterator() { return listIterator(); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.