安卓删除List里面某些一样的数据为何使用的是迭代器而不是for循环

今天写一个关于为何使用迭代器去删除list里面某一项一模一样的数据。我们知道的是for循环不是可以做到遍历么~那么直接使用list里面自带的remove(i)就可以直接删除里面的某一个项了么?而且还快。我们来分析一下为何要使用迭代器而不是for循环。

比如这样的代码

  List<String> names = new ArrayList<>();
    RecyclerAdapter mAdapter;
    RecyclerView mRecyclerview;
    Context context;
    TextView mTvContent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        names.add("5");
        names.add("---65--");
        names.add("5");
        names.add("---23---");
        names.add("5");
        names.add("5");
        names.add("--6325--");
        names.add("5");
        names.add("---2323---");

        mAdapter = new RecyclerAdapter(this,names);
        mRecyclerview.setAdapter(mAdapter);
        int good = 0;
//模块2:
//        for (int i = 0; i < 2;i ++ ){
//            good += need(i + 1);
//        }
//        Iterator iter =names.iterator();
//        while (iter.hasNext()){
//            if (iter.next().equals("5")){
//                iter.remove();
//            }
//       }
        String nameneed = "";
//模块1:
        for (int i = 0;i < names.size();i ++){
            nameneed += names.get(i);
            Log.i("NAME",names.get(i) + "Size+============"+names.size());
            if(names.get(i) == "5"){
                Log.i("NAMENUM",i+"");
                names.remove(i);
            }
        }
        Log.i("NAMENUM==========",nameneed);
        String name = "";
        for (int i = 0; i < names.size();i ++){
            name += names.get(i);
        }
    }
我们来分析一下为什么:对于模块1:我们看到的是一个for循环去删除这个时候我第一项去删除“5”这个数据,这个时候我们进行了第一次的for循环。可是我们的names这个list里面的数据是不是也变化。很确定的說- -是的~~~想一想安卓的内存机制。这个时候我们的names.size()相当于减一了。。。。所以导致我们删除的时候数据不准确了。那这个时候的数据实际上面我们的下标已经产生了变化了。这会导致我们的数据没有办法精确的删除:这个位子我做了一系列的打印来证实我的想法:

里面的是for循环的数据。其实很容易证实我们的想法是不是有问题。所以在删除后,不确定性太多了。你甚至有可能遇到刚刚好全部删除掉。但是这个时候已经没有意义了。数据可能会出现凌乱的问题。这个时候应该使用迭代器。

如代码模块2:

这个是下一个,这样会使得我们想要删除的数据完全删除掉。所以一般来说我们使用迭代器为何使用总是有一定的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值