黑马程序员技术交流社区
标题:
有个小疑问
[打印本页]
作者:
惠晖
时间:
2012-12-11 01:12
标题:
有个小疑问
本帖最后由 惠晖 于 2012-12-11 13:04 编辑
import java.util.*;
class Lun
{
public static void main(String[] args)
{
String s1="abc";
String s2="abcd";
String s3="abcdfd";
String s4="abc";
String s5="abwwcd";
String s6="abcder";
String s7="abc";
ArrayList<String> al=new ArrayList<String>();
al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);
al.add(s5);
al.add(s6);
al.add(s7);
System.out.println("原集合"+al);
al=getNewElements(al);
System.out.println(al);
}
public static ArrayList<String> getNewElements(ArrayList<String> al)
{
ArrayList<String> al1= new ArrayList<String>();
Iterator<String> it=al.iterator();
while (it.hasNext())
{
String s = it.next(); // 如果这里不写这句;
if (!(s.equals("abc"))) //这里改成if(!(it.next().equals("abc")))
{
al1.add(s); // 这里 改成al1(it.next());为什么答案就是不一样的 求解释。。。。。。。。。。。我感觉2个代码都是同一个意思啊
}
}
return al1;
}
}
作者:
颜峰
时间:
2012-12-11 01:24
it.next()是返回迭代器中的下一个元素,每执行一次取得的元素不是同一个
作者:
惠晖
时间:
2012-12-11 01:36
额 你的意思 第二种写法 会漏掉一些值是么
作者:
张海涛
时间:
2012-12-11 01:36
本帖最后由 张海涛 于 2012-12-11 01:38 编辑
while (it.hasNext())
{
String s = it.next(); // 这句话的意思是将迭代的值赋值给s
if (!(s.equals("abc"))) //这里是拿s的值进行比较,迭代器每次取值不同,如果改成it.next()就会再取得下一个值然后进行比较,并非你想要的那个值
{
al1.add(s); // 如果这里也写成it.next()的话就又会取下一个值,所以最后得出的结果不同
}
}
return al1;
复制代码
作者:
惠晖
时间:
2012-12-11 01:38
张海涛 发表于 2012-12-11 01:36
写的真好 赞一个完全明白了
作者:
奋斗的青春
时间:
2012-12-11 02:09
本帖最后由 吴愿涛 于 2012-12-11 14:24 编辑
针对楼主问题总结如下解决方案 ,看官们请过目 :
复制代码
package com.itheima.chendonglian3;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
*
* 一个ArrayList对象aList对象中存在若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素
*
*/
public class ArrayListTest {
public static void main(String[] args) {
System.out.println("--------第一种------------");
removeByFor();
System.out.println("--------第二种------------");
removeByIterator1();
System.out.println("--------第三种-----------------------");
removeByIterator2();
System.out.println("--------第四种-----------------------");
removeByListIterator();
System.out.println("----第五种增强for循环仅限于查询-------");
queryByForEach();
}
/*
* 使用一般for直接对集合进行删除
*/
public static void removeByFor() {
List<String> aList = new ArrayList<String>();
aList.add("abc");
aList.add("abcd");
aList.add("abcde");
aList.add("abc");
System.out.println("删除前:" + aList);
for (int i = 0; i < aList.size(); i++) {
if ("abc".equals(aList.get(i))) {
aList.remove(i);
}
}
System.out.println("删除后:" + aList);
}
/*
* 使用迭代器的remove()方法一
*/
public static void removeByIterator1() {
List<String> aList = new ArrayList<String>();
aList.add("abc");
aList.add("abcd");
aList.add("abcde");
aList.add("abc");
System.out.println("删除前:" + aList);
for (Iterator<String> it = aList.iterator(); it.hasNext();) {
String str = it.next();
if (str.equals("abc")) {
it.remove();
}
}
System.out.println("删除后:" + aList);
}
/*
* 使用迭代器的remove()方法二
*/
public static void removeByIterator2() {
List<String> aList = new ArrayList<String>();
aList.add("abc");
aList.add("abcd");
aList.add("abcde");
aList.add("abc");
System.out.println("删除前:" + aList);
Iterator<String> it = aList.iterator();
while (it.hasNext()) {
String str = it.next();
if (str.endsWith("abc"))
it.remove();
}
System.out.println("删除后:" + aList);
}
/*
* 使用列表迭代器 。ListIterator接口
*/
public static void removeByListIterator() {
List<String> aList = new ArrayList<String>();
aList.add("abc");
aList.add("abcd");
aList.add("abcde");
aList.add("abc");
System.out.println("删除前" + aList);
ListIterator<String> li = aList.listIterator();
while (li.hasNext()) {
String str = li.next();
if (str.equals("abc")) {
li.remove();
}
}
System.out.println("删除后" + aList);
}
/*
* 增强for循环查询,但是不能对遍历的元素进行增、删、改操作 。
*/
public static void queryByForEach() {
List<String> aList = new ArrayList<String>();
aList.add("abc");
aList.add("abcd");
aList.add("abcde");
aList.add("abc");
Object[] obj = aList.toArray();
for (Object o : obj) {
String str = (String) o;
if ("abc".equals(str)) {
System.out.println("遍历出符合条件的元素是:"+str);
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2