考虑:
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 8中,以下哪项更好?
Java 8:
joins.forEach(join -> mIrc.join(mSession, join));
Run Code Online (Sandbox Code Playgroud)
Java 7:
for (String join : joins) {
mIrc.join(mSession, join);
}
Run Code Online (Sandbox Code Playgroud)
我有很多可以用lambdas"简化"的for循环,但使用它们真的有什么好处吗?它会改善他们的性能和可读性吗?
编辑
我还将这个问题扩展到更长的方法.我知道你不能从lambda中返回或破坏父函数,在比较它们时也应该考虑到这一点,但还有什么需要考虑的吗?
哪种是最有效的遍历集合的方式?
List<Integer> a = new ArrayList<Integer>();
for (Integer integer : a) {
integer.toString();
}
Run Code Online (Sandbox Code Playgroud)
要么
List<Integer> a = new ArrayList<Integer>();
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
Integer integer = (Integer) iterator.next();
integer.toString();
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不是这个,这个,这个或这个的完全重复,尽管最后一个问题的答案之一很接近.这不是欺骗的原因是,大多数都是比较你get(i)在循环中调用的循环,而不是使用迭代器.
正如Meta上所建议的,我将发布我对这个问题的回答.
我很快就会教"Java崩溃课程".虽然假设观众成员会知道Big-O表示法可能是安全的,但假设他们知道各种集合实现的各种操作的顺序是什么可能是不安全的.
我可以花时间自己生成一个摘要矩阵,但如果它已经在公共领域的某个地方出现,我肯定想重复使用它(当然还有适当的信用.)
任何人有任何指针?
我需要使用Java以相反的顺序运行List.
所以这是前进的地方:
for(String string: stringList){
//...do something
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用for each语法以相反的顺序迭代stringList ?
为了清楚起见:我知道如何以相反的顺序迭代列表但是想知道(出于好奇心)如何在每个样式中执行它.
我正在使用JPA持久化对象.Main对象与另一个对象具有一个拥有的One-Many关系.另一个对象存储在HashMap中.什么样的同步可以解决这个问题?它似乎发生在完全随机的时间,并且非常难以预测.这是我得到的例外:
Exception in thread "pool-1-thread-1" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$ValueIterator.next(Unknown Source)
at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:555)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
Run Code Online (Sandbox Code Playgroud) 当我在Java中编写和发现新的处理方式时,我总是对通过列表循环输出数据的更好方法感到困惑.
在下面的例子中,我循环遍历列表并使用计数器,因此很多次我必须在输出中包含一个索引计数器.
我偏爱方法1,但我发现这些方法中的任何一个都有点过时了.我已经看到很多循环列表的例子,而且主要使用方法2.
所以我的问题是什么是更好的方法,如果所有这些方法都一样,那么最标准的是什么?
private ArrayList<String> list = new ArrayList<String>();
public Test() {
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
list.add("Five");
method1();
method2();
method3();
}
public void method1() {
System.out.println("Method 1");
int i = 1;
for (String value:list) {
System.out.println((i++) + " = " + value);
}
}
public void method2() {
System.out.println("Method 2");
for (int i = 0; i < list.size(); i++) {
System.out.println((i+1) + " = " + list.get(i));
}
}
public void method3() {
System.out.println("Method 3");
Iterator<String> it = list.iterator(); …Run Code Online (Sandbox Code Playgroud) 我有一个ArrayList完整的String数组,我无法弄清楚如何循环.迭代器对我来说是新的,即使我过去使用它们,我也不知道该怎么做.
Iterator<String[]> iterator = list.iterator();
while (iterator.hasNext()) {
String trip = "Till: " + iterator.next(0) + " | Från: " + list.get(4) + " | Kostar: " + list.get(1) +"kr | Avgår: " + list.get(2) + " | Ankomst Tid: " + list.get(3) + " | Antal bokningar: " + list.get(4);
Run Code Online (Sandbox Code Playgroud)
这是我正在做的一些实验.我虽然iterator.next()会在当前行返回StringArray,所以我尝试了例如iterator.next(0).据我所知list.get(x)只给我一行.
在上面的代码中,我希望每个行String Array都在某个索引处.像这样的东西:
for each row
system.out.println(String[2] +String[5]);
Run Code Online (Sandbox Code Playgroud) 我对迭代器的方法有疑问next()。如果我的代码中有此行(arrayOfStrings大小 = 4):
Iterator<String> it = arrayOfStrings.iterator(); //arrayOfString is ArrayList<String>\n\nwhile(it.hasNext()) {\n String e = it.next();\n System.out.println(e);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在第一次迭代时,迭代器开始指向索引为 0 的元素?或者像“索引-1”?
\n\n我问这个问题是因为据我所知该next()方法返回集合中的下一个元素。
因此,如果在第一次迭代时,迭代器在next()调用时从索引 0 开始,它将返回索引 1 处的元素,并且我将\xc2\xb4t 无法对索引 0 处的元素执行任何操作?
我是新手Collection Framework.我正在运行一个java程序ArrayList().当我尝试循环它以获取它的元素,但它抛出错误就像
HelloWorld.java:15: error: cannot find symbol
for(int k=0;k<al.length;k++)
^
symbol: variable length
location: variable al of type ArrayList<String>
HelloWorld.java:17: error: array required, but ArrayList<String> found
System.out.println("elements are"+al[k]);
Run Code Online (Sandbox Code Playgroud)
这是我写的代码.
import java.util.ArrayList;
public class HelloWorld{
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("pen");
al.add("pencil");
al.add("ink");
al.add("notebook");
al.add("book");
al.add("books");
al.add("paper");
al.add("white board");
for(int k=0;k<al.length;k++)
{
System.out.println("elements are"+al[k]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
帮我指出我的错误.提前致谢
我在某种程度上感到愚蠢地问这个问题,但是
为什么不能使用EnhancedForStatementList手动更改对象的引用?
private static List<String> list = new ArrayList<String>();
public static void main(String[] args) {
list.add("AAA");
list.add("BBB");
list.add("CCC");
for(String s : list){
if(s.equals("BBB")) s = "QQQ";
}
System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)
将打印,[AAA, BBB, CCC]因为对第二个元素的引用没有改变,正如人们所预料的那样.
但是为什么我不允许(或者是List错误的类型?)手动更改列表条目的引用?此示例中的字符串可以是任何复杂类型,此问题与更改a中的引用有关List.
编辑:好的,也许很清楚为什么它的工作方式有效,但我怎样才能完成参考变更?我无法相信任何子类型都List无法改变任何元素的引用.
edit2:所以在使用EnhancedForStatement时无法更改引用?
我正在尝试使用ListIterator从ArrayList打印,我很确定我做错了因为它不起作用但我不知道如何解决它.所有抓住零件编号的线路都不起作用,不确定原因; P.总是赞赏任何帮助:).
package invoice;
import static java.lang.System.out;
import java.util.*;
public class InvoiceTest {
public static void print(){
}
public static void main (String args[]) {
Scanner imput = new Scanner (System.in);
ArrayList lInvoice = new ArrayList() ;
int counter = 0;
int partCounter;
out.println("Welcome to invoice storer 1.0!");
out.println("To start please enter the number of items: ");
partCounter = imput.nextInt();
while (counter < partCounter){
counter++;
out.println("Please enter the part number:");
Invoice invoice1 = new Invoice(); //Makes invoice 1 use the …Run Code Online (Sandbox Code Playgroud)