美文网首页
DeleteCollection

DeleteCollection

作者: 勇者与王者 | 来源:发表于2019-09-28 16:11 被阅读0次
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);
        
        
        
    }

}

相关文章

网友评论

      本文标题:DeleteCollection

      本文链接:https://www.haomeiwen.com/subject/liktpctx.html