Java 问题数组列表类
我在列出ArrayList时遇到问题。我的代码:Java 问题数组列表类,java,arraylist,Java,Arraylist,我在列出ArrayList时遇到问题。我的代码: Iterator<String> iterator = (Iterator<String>) myList.iterator(); while (iterator.hasNext()) {//List tagListAux System.out.println("Test -> "+iterator.next()); if(iterator.next().equalsIgnoreCas
Iterator<String> iterator = (Iterator<String>) myList.iterator();
while (iterator.hasNext()) {//List tagListAux
System.out.println("Test -> "+iterator.next());
if(iterator.next().equalsIgnoreCase(myString)){
flag = true;
}
myList.add(myString);
我做错了什么??在此之前,我还遇到了并发问题,通过更改迭代器声明解决了这些问题。提前感谢在检查下一个元素是否存在后,您在while block中调用了两次
next()
[请注意不是两个]
替换
Iterator<String> iterator = (Iterator<String>) myList.iterator();
while (iterator.hasNext()) {//List tagListAux
System.out.println("Test -> "+iterator.next());
if(iterator.next().equalsIgnoreCase(myString)){
flag = true;
}
在检查是否存在下一个元素后,您在while块中调用了两次next()
[请注意不是两个]
替换
Iterator<String> iterator = (Iterator<String>) myList.iterator();
while (iterator.hasNext()) {//List tagListAux
System.out.println("Test -> "+iterator.next());
if(iterator.next().equalsIgnoreCase(myString)){
flag = true;
}
您有
iterator.next()
两次!调用它一次,然后使用它的值:String value=iterator.next()
您有迭代器。next()
两次!调用它一次,然后使用它的值:String value=iterator.next()
使用methode迭代器时,只需使用foreach
(Java 5+)循环只需使用foreach
(Java 5+)循环。下一步(),增加Arraylist中的指针,同时执行两次,而不检查下一个元素是否存在(对于下一次调用)。这就是为什么你有一个“非接触式例外”
你必须这样做:
while (iterator.hasNext()) {//List tagListAux
Object currentElement = iterator.next();
System.out.println("Test -> "+ currentElement);
if(currentElement .equalsIgnoreCase(myString)){
flag = true;
}
while (iterator.hasNext()) {//List tagListAux
String s = iterator.next().toString();
System.out.println("Test -> "+ s);
if(s.equalsIgnoreCase(myString)){
flag = true;
}
}
Anhuin当您使用methode迭代器.next()时,您在Arraylist中递增指针,并且在同一时间内执行两次,同时不检查下一个元素是否存在(对于下一次调用)。这就是为什么你有一个“非接触式例外” 你必须这样做:
while (iterator.hasNext()) {//List tagListAux
Object currentElement = iterator.next();
System.out.println("Test -> "+ currentElement);
if(currentElement .equalsIgnoreCase(myString)){
flag = true;
}
while (iterator.hasNext()) {//List tagListAux
String s = iterator.next().toString();
System.out.println("Test -> "+ s);
if(s.equalsIgnoreCase(myString)){
flag = true;
}
}
Anhuin我认为您应该这样更改代码:
while (iterator.hasNext()) {//List tagListAux
Object currentElement = iterator.next();
System.out.println("Test -> "+ currentElement);
if(currentElement .equalsIgnoreCase(myString)){
flag = true;
}
while (iterator.hasNext()) {//List tagListAux
String s = iterator.next().toString();
System.out.println("Test -> "+ s);
if(s.equalsIgnoreCase(myString)){
flag = true;
}
}
我认为您应该这样更改代码:
while (iterator.hasNext()) {//List tagListAux
Object currentElement = iterator.next();
System.out.println("Test -> "+ currentElement);
if(currentElement .equalsIgnoreCase(myString)){
flag = true;
}
while (iterator.hasNext()) {//List tagListAux
String s = iterator.next().toString();
System.out.println("Test -> "+ s);
if(s.equalsIgnoreCase(myString)){
flag = true;
}
}
在速度方面也是最好的使用方式吗
在速度方面也是最好的使用方式吗