黑马程序员技术交流社区
标题:
求解惑
[打印本页]
作者:
田宇鹤
时间:
2012-12-10 23:48
标题:
求解惑
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> aList=new ArrayList<String>();
aList.add(s1);
aList.add(s2);
aList.add(s3);
aList.add(s4);
aList.add(s5);
aList.add(s6);
aList.add(s7);
show(aList);
System.out.println(aList);
}
public static void show(ArrayList aList){
Iterator<String> it=aList.iterator();
try{
while(it.hasNext()){
String str=it.next();
if("abc".equals(str)){
aList.remove(str);
show(aList);//为什么要用递归?
}
}
}catch(Exception e){
}
}
}
问什么要用递归啊, 不是有while循环么? 循环一次 如果有abc 就删除 用迭代器遍历而不用递归该怎么改?
作者:
惠晖
时间:
2012-12-11 01:02
用iterator的方法
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")))
{
al1.add(s);
}
}
return al1;
}
}
这题目用递归明显是代码变少了吧?
作者:
奋斗的青春
时间:
2012-12-11 01:15
本帖最后由 吴愿涛 于 2012-12-11 14:37 编辑
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);
}
}
}
}
复制代码
作者:
颜峰
时间:
2012-12-11 01:17
这代码真心有问题,在iterator迭代时不能修改集合中的元素,否则会抛异常,使用递归无非是在catch到异常后再继续执行,而且catch块中什么都没写,表面看起来达到效果了。
还是改成for循环吧,不要用iterator了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2