考虑:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
Run Code Online (Sandbox Code Playgroud)
for (String item : someList) {
System.out.println(item);
}
Run Code Online (Sandbox Code Playgroud)
如果for不使用for each语法,等效循环会是什么样的?
对于Java语言有些新意,我试图让自己熟悉一个可能遍历列表(或者可能是其他集合)以及每个集合的优点或缺点的所有方法(或者至少是非病态方法).
给定一个List<E> list对象,我知道以下循环所有元素的方法:
while/ do while循环以及)// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
E element = list.get(i);
// 1 - can call methods of element
// 2 - can use 'i' to make index-based calls to methods of list
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:正如@amarseillan指出的那样,这种形式对于迭代Lists来说是一个糟糕的选择,因为该get方法的实际实现可能不如使用时那样有效Iterator.例如,LinkedList实现必须遍历i之前的所有元素以获得第i个元素.
在上面的例子中,List实现没有办法"保存它的位置"以使未来的迭代更有效.因为ArrayList它并不重要,因为复杂性/成本get是恒定时间(O(1)),而a LinkedList是它与列表的大小(O(n))成比例.
有关内置Collections实现的计算复杂性的更多信息,请查看此问题 …
请使用以下两行代码:
for (int i = 0; i < some_vector.size(); i++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();
some_iterator++)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我被告知第二种方式是首选.这究竟是为什么?
将枚举元素的名称作为Strings 数组的最简单和/或最短的方法是什么?
我的意思是,例如,如果我有以下枚举:
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
public static String[] names() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
该names()方法将返回一个类似的数组{ "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" }.
我在接受采访时被问到使用for循环使用迭代器的优点是什么?使用for循环迭代器的优点是什么?
任何人都可以回答这个问题,以便将来如果我面临类似的问题那么我可以回答这个问题
在遍历ArrayList,HashMap和其他集合时,是否有任何性能测试结果可用于比较传统的for循环与Iterator?
或者我为什么要使用Iterator for循环,反之亦然?
请考虑以下情形.
List<String> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
现在我添加了String此列表的值.
我使用以下方法来查看列表中的每个元素.
选项一 - 使用 for-each
for (String i : list) {
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
选项二 - 使用 Iterator
Iterator it=list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道如果我使用for-each而不是有任何性能优势Iterator.现在在Java中使用Iterator也是一种不好的做法?
我经常看到如下代码:
Iterator i = list.iterator();
while(i.hasNext()) {
...
}
Run Code Online (Sandbox Code Playgroud)
但我写的是(当Java 1.5不可用或者每个都不能使用时):
for(Iterator i = list.iterator(); i.hasNext(); ) {
...
}
Run Code Online (Sandbox Code Playgroud)
因为
i在较小的范围内i外面使用?i声明在哪里?)我认为代码应该尽可能简单易懂,这样我才能制作复杂的代码来完成复杂的事情.你怎么看?哪个更好?
我刚刚了解了Java Collections Framework如何在链表中实现数据结构.根据我的理解,这Iterators是一种遍历数据结构(如列表)中的项目的方法.为什么使用这个界面?为什么这些方法hasNext(),next()而remove()不是直接编码到数据结构实现本身?
从Java网站:链接文本
public interface Iterator <E>
集合上的迭代器.Iterator取代了Java集合框架中的Enumeration.迭代器在两个方面与枚举不同:
此接口是Java Collections Framework的成员.
- 迭代器允许调用者在迭代期间使用定义良好的语义从底层集合中删除元素.
- 方法名称已得到改进.
我试着用Google搜索,似乎无法找到明确的答案.有人可以解释为什么Sun选择使用它们吗?是因为更好的设计?增加安全性?好的OO练习?
任何帮助将不胜感激.谢谢.