在java中为链表创建迭代器而不使用getEntry
我正在尝试创建一个适用于linkedList的迭代器。我已经创建了链表,我认为它应该可以很好地工作,但是现在我需要关于创建迭代器的帮助。我试图使它比简单地使用带有for循环的getEntry()更快,每次增加一个,因为使用该方法意味着我必须遍历每个元素的链接列表。我试图更快地解决它,但不知道从哪里开始。我知道我需要创建next和hasnext方法,但不确定如何创建。还停留在构造函数和实例方法上 以下是我目前掌握的代码:在java中为链表创建迭代器而不使用getEntry,java,iterator,Java,Iterator,我正在尝试创建一个适用于linkedList的迭代器。我已经创建了链表,我认为它应该可以很好地工作,但是现在我需要关于创建迭代器的帮助。我试图使它比简单地使用带有for循环的getEntry()更快,每次增加一个,因为使用该方法意味着我必须遍历每个元素的链接列表。我试图更快地解决它,但不知道从哪里开始。我知道我需要创建next和hasnext方法,但不确定如何创建。还停留在构造函数和实例方法上 以下是我目前掌握的代码: import java.util.NoSuchElementExceptio
import java.util.NoSuchElementException;
public class SListIterator<T>
{
private Node firstNode;
private int numberOfEntries;
public SListIterator()
{
firstNode = null;
numberOfEntries = 0;
}
public void addToFirst(T aData)
{
firstNode = new Node(aData, firstNode);
numberOfEntries++;
}
public T getEntry(int givenPosition)
{
T result = null;
if((givenPosition >= 1) && (givenPosition <= numberOfEntries))
{
result = (getNodeAt(givenPosition)).data;
}
return result;
}
private Node getNodeAt(int givenPosition)
{
Node currentNode = firstNode;
for(int counter = 1; counter < givenPosition; counter++)
{
currentNode = currentNode.next;
}
return currentNode;
}
public Iterator<T> getIterator()
{
// TO DO
}
private class IteratorForSList implements Iterator<T>
{
// instance variable for IteratorForSList
private IteratorForSList()
{
// constructor
}
public boolean hasNext()
{
// need help
}
public T next()
{
// need help
}
public T remove()
{
throw new UnsupportedOperationException("remove() is not supported by this iterator");
}
}
private class Node
{
private T data;
private Node next;
private Node(T aData, Node nextNode)
{
data = aData;
next = nextNode;
}
}
}
import java.util.NoSuchElementException;
公共类滑轨器
{
私有节点firstNode;
私人int numberOfEntries;
公共Slisterator()
{
firstNode=null;
numberOfEntries=0;
}
公共无效地址第一(T aData)
{
firstNode=新节点(aData,firstNode);
numberOfEntries++;
}
公共T获取条目(int给定位置)
{
T结果=null;
如果((givenPosition>=1)&&(givenPosition为什么不使用java.util.LinkedList?它有一个返回迭代器的迭代器方法
import java.util.Iterator;
import java.util.LinkedList;
public class SListIterator{
public static void main(String[] args){
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(0);
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
import java.util.Iterator;
导入java.util.LinkedList;
公共类滑轨器{
公共静态void main(字符串[]args){
LinkedList=新建LinkedList();
列表。添加(0);
增加第(1)款;
增加(2);
增加(3);
迭代器iter=list.Iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
迭代器只需要知道链接列表中的当前节点:
public Iterator<T> getIterator() {
return new IteratorForSList(firstNode);
}
private class IteratorForSList implements Iterator<T> {
private Node currentNode;
private IteratorForSList(Node list) {
currentNode = list;
}
public boolean hasNext() {
return currentNode != null;
}
public T next() {
T result = currentNode.data;
currentNode = currentNode.next;
return result;
}
public void remove() {
throw new UnsupportedOperationException(
"remove() is not supported by this iterator");
}
}
公共迭代器getIterator(){
返回新的迭代器ForsList(firstNode);
}
私有类迭代器ForsList实现迭代器{
私有节点currentNode;
私有迭代器列表(节点列表){
currentNode=列表;
}
公共布尔hasNext(){
返回currentNode!=null;
}
公共交通工具{
T结果=currentNode.data;
currentNode=currentNode.next;
返回结果;
}
公共空间删除(){
抛出新的UnsupportedOperationException(
“此迭代器不支持remove()”;
}
}