package generic;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import objectAndClass.Hero;
/**
*
* @author qz:
* @version 创建时间:2019年9月28日 上午11:11:20
*
*/
public class DeleteCollection {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Hero> heros = new ArrayList<>();
for (int i = 0 ; i < 100; i++) {
heros.add(new Hero("hero "+ i));
}
// System.out.println(heros.get(0).equals(heros.get(1)));
Iterator<Hero> it = heros.iterator();
// while (it.hasNext()) {
// Hero h = it.next();
// String [] s = h.getName().split(" ");
// System.out.println(Arrays.toString(s)+" "+s[1]);
//// System.out.println(Integer.parseInt(s[1]) % 8);
//
// if ( Integer.parseInt(s[1]) % 8 == 0 ) {
// System.out.println(h);
//// System.out.println(heros.indexOf(h));
//// System.out.println(heros.get(8));
//
// System.out.println(heros.get(0).equals(h));
//
// System.out.println("移除第 "+heros.indexOf(h)+"个元素");
// it.remove();
// System.out.println(heros);
//
// }
//
// }
List<Hero> deleteHeros = new ArrayList<>();
for (int i = 0 ; i<100; i+=8) {
//写到这一句就觉得不对了
// remove之后整个list的索引都变了,再按照for循环中的模式去移除,肯定不行
// 第一个反应是,把所有的要删除的元素都记下来存一个新列表,最后一起删,但是这个实现起来,
// 最终还是不能用索引来删除,只能想到用remove(Object o)方法:
// 或者是 将所有的索引为8倍数的位置进行标记,或者赋值为null?
// 又或者是 将原数组除了 符合 8 倍数的元素都复制到一个新列表,这个好像也挺麻烦的。。
// 所以,如果一定要用 i+=8 这种遍历方式,就只有将 将所有的索引为8倍数的位置赋值为null,
// 然后统一删
// heros.remove(i);
// heros.get(i) = null;
heros.set(i, null);
// deleteHeros.add(heros.get(i));
//syso 输出 一个整数+Object对象 会报错,需要在中间加一个 “ ”就自动转成字符串
System.out.println(i+" "+heros.get(i));
// System.out.println(heros);
}
System.out.println(heros);
// 已经没有99个元素了。。越界异常
// 好呆。。直接 i< heros.size() 不就行了吗。。。服了我自己
//就应该统一的用自己的length或 size()这些!!
for (int i = 0 ; i< heros.size() ;i++) {
if (heros.get(i) == null) {
System.out.println("移除第 "+i+"个元素");
heros.remove(i);
}
}
// for(Hero h :heros) {
// if (h == null) {
// System.out.println("移除第 "+heros.indexOf(h)+"个元素");
// //增强for本质还是 Iterator
// 遍历的同时进行删除抛出异常 ConcurrentModificationException
// heros.remove(h);
// }
// }
//上面的方法也不行,试下把要删除的元素 保存到新列表
// for ( int i = 0 ; i< heros.size() ; i++) {
// for ( int j = 0 ;j < deleteHeros.size();j++) {
// if (heros.get(i) == deleteHeros.get(j)) {
// heros.remove(i);
// }
// }
// }
//更好的办法:
// for (Hero h : deleteHeros) {
// heros.remove(h);
// }
// heros.removeAll(deletingHeros); //直接通过removeAll删除多个Hero对象
System.out.println(heros);
}
}
网友评论