我尽可能地搜索并且我正在努力寻找这个问题的答案。我有一个Iterable对象,我想修改它中的每个项目(我不想要添加一个新值。我试过了
for (T e : list)
{
e = a.get(index);
System.out.println(e);
index--;
}
修改它但显然没有用,因为它是一个foreach循环。有人能告诉我这个代码我做错了什么吗? (我的想法是,我试图撤销我的Iterable项目订单。)
public class LinkedList<T>
{
Iterable<T> list;
public LinkedList() {} //create an empty list
public LinkedList(Iterable<T> iterable)
{
list = iterable;
}
@SuppressWarnings("unchecked")
public Iterable<T> reverse()
{
Integer size = size();
List<T> a = new ArrayList<T>();
Integer index = size - 1;
for (T e : list)
{
a.add(e);
}
Iterator iterator = list.iterator();
while (iterator.hasNext())
{
T element = (T)iterator.next();
element = a.get(index);
System.out.println(element);
index--;
}
return list;
}
}
答案 0 :(得分:0)
你需要理解这个循环结构:
for (T e : list)
这将为变量e
分配一个对列表中某个对象的引用的副本。
您尝试为e
分配新值:
e = a.get(index);
但所有这一切都是覆盖副本的参考。列表list
继续使用它一直使用的引用。
你的最终目标是返回一个反向传播的迭代?你有几个选择。
Iterable<T>
。Collections.reverse(list)
)。它的自然迭代顺序类似于&#34;反向&#34;迭代原始列表。你做的一件事就是让自己变得更难:
Iterable<T> list;
public LinkedList(Iterable<T> iterable) {
list = iterable;
}
这个是否需要接受Iterable
特有的内容?它是否可以接受List
(使您能够在任何索引处查找元素)?如果 为Iterable
,您可能不必将存储为Iterable。您可以将其内容插入ArrayList
,然后您的变量list
实际上可能是List
。