首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从
hero 0
hero 1
hero 2
…
hero 99
通过遍历的手段,删除掉名字编号是8的倍数的对象
package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import charactor.Hero;
public class TestCollection{
public static void main(String[] args) {
List<Hero> heros = new ArrayList<>();
System.out.println("原ArrayList:");
for(int i=0;i<100;i++) {
heros.add(new Hero("Hero "+i));
System.out.print(heros.get(i)+" ");
}
System.out.println("现在的集合中元素的个数是:"+heros.size());
System.out.println("-------------------------------------------");
// 通过遍历的手段,删除掉名字编号是8的倍数的对象
// 第一种方法:for循环遍历删除
/*思路:
* 先用循环遍历ArrayList中的元素
* 然后利用重写的toString方法获得字符串形式的类名
* 利用字符串的判断内容方法找出为8的倍数的元素
* 将其删除
*/
{
System.out.println("第一种方法:for循环遍历删除:");
for(int i=0;i<heros.size();i++) {
// System.out.println(heros.get(i));
int id = Integer.parseInt(heros.get(i).toString().substring(5));
// System.out.println(id);
if(id != 0 && id%8 == 0) {
heros.remove(heros.get(i));
System.out.print(heros.get(i)+" ");
}
}
System.out.println("现在的集合中元素的个数是:"+heros.size());
}
System.out.println("-------------------------------------------");
// 第二种方法:利用迭代器Iterator删除元素
{
System.out.println("第二种方法:利用迭代器Iterator删除元素:");
// 创建迭代器对象:
Iterator<Hero> it = heros.iterator();
while(it.hasNext()) {
Hero h = it.next();
int id = Integer.parseInt(h.toString().substring(5));
if(id != 0 && id%8 == 0) {
// heros.remove(h); //会导致抛出java.util.ConcurrentModificationException异常,
//因为在遍历是对集合进行了修改
it.remove(); //推荐使用
System.out.print(h+" ");
}
}
System.out.println("现在的集合中元素的个数是:"+heros.size());
}
System.out.println("-------------------------------------------");
// 第三种方法:利用增强型for循环遍历集合并删除
{
System.out.println("第三种方法:利用增强型for循环遍历集合并删除:");
List<Hero> list_remove = new ArrayList<>(); //新建一个集合
for(Hero each : heros) {
int id = Integer.parseInt(each.toString().substring(5));
if(id != 0 && id%8 == 0) {
// heros.remove(each); //会导致抛出java.util.ConcurrentModificationException异常,
//因为在遍历是对集合进行了修改
list_remove.add(each); //将要移除的元素放到一个集合里面
}
}
heros.removeAll(list_remove); //移除集合中的所有元素
for(Hero each : heros) {
System.out.print(each+" ");
}
System.out.println("现在的集合中元素的个数是:"+heros.size());
}
}
}
笔记:此题不能直接判断元素序号与8的关系然后删除,因为删除之后元素重新排列,与原本的想法就不匹配了。所以要想办法取到元素内容中的序号,以此作为判断依据。
String java.lang.String.substring(int beginIndex)
String java.lang.String.substring(int beginIndex,int endIndex)左闭右开