ArrayList删除和增加元素问题.

wleexi 2013-07-27 01:14:47
要求在每次运行程序是,把List中前两个元素放在最后,代码如下.

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;

public class BBB {

/**
* @param args
*/
public static void main(String[] args) {
Test2();
}

public static void Test2() {
List<Integer> data = new ArrayList<Integer>();
data.add(0);
data.add(1);
data.add(2);
data.add(3);
data.add(4);
data.add(5);
data.add(6);

System.out.println(data.toString());

for (int i = 0; i < data.size(); i++) {

data.add(data.get(i));
data.remove(data.get(i));
}
System.out.println(data.toString());


for (int i = 0; i < data.size(); i++) {

data.add(data.get(i));
data.remove(data.get(i));
}
System.out.println(data.toString());
}

}



输出结果

[0, 1, 2, 3, 4, 5, 6]
[1, 3, 5, 0, 4, 2, 6]
[3, 0, 2, 1, 4, 5, 6]


首位的0并没有放在最后 这是为啥,
该如何解决
...全文
570 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
一颗米粒 2013-08-07
  • 打赏
  • 举报
回复
import java.util.LinkedList; public class Test { public static void main(String[] args) { toDemo(); } public static void toDemo(){ LinkedList<Integer> data=new LinkedList<Integer>(); data.add(0); data.add(1); data.add(2); data.add(3); data.add(4); data.add(5); data.add(6); System.out.println(data.toString()); data.add(data.removeFirst()); System.out.println(data.toString()); data.add(data.removeFirst()); System.out.println(data.toString()); } } //代码简单明了,无需index,请指教
天河360 2013-08-07
  • 打赏
  • 举报
回复
这个就不要使用ArrayList的,最好使用LinkedList来实现,可参考如下代码: List<Integer> data = new LinkedList<Integer>(); data.add(0); data.add(1); data.add(2); data.add(3); data.add(4); data.add(5); data.add(6); System.out.println("List修改之前:"+data.toString()); int d1 = data.remove(0); data.add(data.size(), d1);//将原第一个值添加至末尾 System.out.println("List修改之后:"+data.toString());
wleexi 2013-07-28
  • 打赏
  • 举报
回复
引用 24 楼 Tmac_shamgod 的回复:

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
 
public class BBB {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Test2();
    }
 
    public static void Test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        System.out.println(data.toString());
        data.add(data.get(0));//无需for循环,第一个数到最后
        data.remove(data.get(0));
        System.out.println(data.toString());
        data.add(data.get(0));//无需for循环,第一个数(一开始数组中的第二个)到最后
        data.remove(data.get(0));
        System.out.println(data.toString());
    }
 
}
楼主把自己的for循环跑一遍就知道了,还有可以像楼上的那样把练个元素一起增加删除,在for循环里加一个i<2就可以了,那样复用性更高!
需求是在jsp中读取数据库中的数据的., 不循环只能写死了
Tmac_shamgod 2013-07-28
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
 
public class BBB {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Test2();
    }
 
    public static void Test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        System.out.println(data.toString());
        data.add(data.get(0));//无需for循环,第一个数到最后
        data.remove(data.get(0));
        System.out.println(data.toString());
        data.add(data.get(0));//无需for循环,第一个数(一开始数组中的第二个)到最后
        data.remove(data.get(0));
        System.out.println(data.toString());
    }
 
}
楼主把自己的for循环跑一遍就知道了,还有可以像楼上的那样把练个元素一起增加删除,在for循环里加一个i<2就可以了,那样复用性更高!
wleexi 2013-07-28
  • 打赏
  • 举报
回复
引用 22 楼 u011325635 的回复:
[quote=引用 楼主 wleexi 的回复:]
回楼主: 真心不推荐arraylist,记得学习时候说的查询arraylist,排序likedlist 我写的,如下:

package com.nyohh.test1;

import java.util.LinkedList;
import java.util.List;

public class SortFirstToEnd
{
	public static void main(String[] args)
	{
		List<Integer> data = null;
		if (null == data)
		{
			data = new LinkedList<Integer>();
			data.add(0);
			data.add(1);
			data.add(2);
			data.add(3);
			data.add(4);
			data.add(5);
			data.add(6);
			System.out.println("初始序列:"+data);
		}
		

		System.out.println(sortList(data));
		System.out.println(sortList(data));
		System.out.println(sortList(data));
		System.out.println(sortList(data));
	}

	private static List<Integer> sortList(List<Integer> data)
	{
		int num = 2;// 这个num表示要把前面几个放到最后去

		for (int i = 0; i < num; i++)
		{
			data.add(data.remove(0));
		}

		return data;
	}
}

[/quote] 业务场景是jsp一个封装过的方法 只能返回List.....每次登陆该页面展示的东西不一样...于是就想把每一次看过的往后移动
小行星0906 2013-07-28
  • 打赏
  • 举报
回复
引用 楼主 wleexi 的回复:
回楼主: 真心不推荐arraylist,记得学习时候说的查询arraylist,排序likedlist 我写的,如下:

package com.nyohh.test1;

import java.util.LinkedList;
import java.util.List;

public class SortFirstToEnd
{
	public static void main(String[] args)
	{
		List<Integer> data = null;
		if (null == data)
		{
			data = new LinkedList<Integer>();
			data.add(0);
			data.add(1);
			data.add(2);
			data.add(3);
			data.add(4);
			data.add(5);
			data.add(6);
			System.out.println("初始序列:"+data);
		}
		

		System.out.println(sortList(data));
		System.out.println(sortList(data));
		System.out.println(sortList(data));
		System.out.println(sortList(data));
	}

	private static List<Integer> sortList(List<Integer> data)
	{
		int num = 2;// 这个num表示要把前面几个放到最后去

		for (int i = 0; i < num; i++)
		{
			data.add(data.remove(0));
		}

		return data;
	}
}

A18767101172 2013-07-27
  • 打赏
  • 举报
回复
你的本意其实你自己都理解错了, 干嘛还一个for循环
  • 打赏
  • 举报
回复
每一次循环的数组元素排序,也就是每个索引对应的数字每次都是不同的,不是最原先的那个排序
DaiwjDev 2013-07-27
  • 打赏
  • 举报
回复
引用 13 楼 wleexi 的回复:
[quote=引用 11 楼 wleexi 的回复:] [quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] API上说 " 如果正在进行此操作时修改指定的 collection ,那么此操作的行为是不确定的。(这意味着如果指定的 collection 是此列表且此列表是非空的,那么此调用的行为是不确定的)。 " 是不是这个关系 [/quote] 需求是每次运行程序,把第一个元素放到最后一位, 0 1 2 3 4 5 6 1 2 3 4 5 6 0 这样的 [/quote] 让我想起了循环队列
oh_Maxy 2013-07-27
  • 打赏
  • 举报
回复
嗯,循环里的很多判断(影响循环体是否继续的那种),放到循环体判断中,会显得简洁些,看个人习惯吧~
wleexi 2013-07-27
  • 打赏
  • 举报
回复
引用 16 楼 oh_Maxy 的回复:
[quote=引用 14 楼 wleexi 的回复:] [quote=引用 12 楼 oh_Maxy 的回复:] [quote=引用 9 楼 wleexi 的回复:] [quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] 每次输出都是一样 [/quote] 因为你的需求就是这样的。你想要什么效果呢?[/quote] 是每运行一次 要把前四个元素添加到List的尾部. 0 1 2 3 4 5 6 4 5 6 0 1 2 3 这样的 [/quote]
    public static void test2()
    {
        /*
         * 是每运行一次  要把前四个元素添加到List的尾部.
        0 1 2 3 4 5 6
        4 5 6 0 1 2 3
        这样的  
         */
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);

        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());

        //循环到4即可
        for (int i = 0; i < 4 && i < data.size(); i++)
        {

            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());

        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < 4 && i < data.size(); i++)
        {

            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] 好简洁...我的方法是在循环里面加了个判断....
oh_Maxy 2013-07-27
  • 打赏
  • 举报
回复
引用 14 楼 wleexi 的回复:
[quote=引用 12 楼 oh_Maxy 的回复:] [quote=引用 9 楼 wleexi 的回复:] [quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] 每次输出都是一样 [/quote] 因为你的需求就是这样的。你想要什么效果呢?[/quote] 是每运行一次 要把前四个元素添加到List的尾部. 0 1 2 3 4 5 6 4 5 6 0 1 2 3 这样的 [/quote]
    public static void test2()
    {
        /*
         * 是每运行一次  要把前四个元素添加到List的尾部.
        0 1 2 3 4 5 6
        4 5 6 0 1 2 3
        这样的  
         */
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);

        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());

        //循环到4即可
        for (int i = 0; i < 4 && i < data.size(); i++)
        {

            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());

        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < 4 && i < data.size(); i++)
        {

            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
oh_Maxy 2013-07-27
  • 打赏
  • 举报
回复
引用 11 楼 wleexi 的回复:
[quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] API上说 " 如果正在进行此操作时修改指定的 collection ,那么此操作的行为是不确定的。(这意味着如果指定的 collection 是此列表且此列表是非空的,那么此调用的行为是不确定的)。 " 是不是这个关系 [/quote] 保证list1.addAll(list2);时,不会对list2做并发操作就没关系了。 源码:

    public boolean addAll(Collection<? extends E> c) {
	Object[] a = c.toArray();
        int numNew = a.length;
	ensureCapacity(size + numNew);  // Increments modCount
        System.arraycopy(a, 0, elementData, size, numNew);
        size += numNew;
	return numNew != 0;
    }
第一步转换为a数组之后,如果有对c有并发操作,此时a数组不会受影响,这时的addAll看起来就“不准”了(表面上看起来,list1.addAll(list2)结果不一定了)。
wleexi 2013-07-27
  • 打赏
  • 举报
回复
引用 12 楼 oh_Maxy 的回复:
[quote=引用 9 楼 wleexi 的回复:] [quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] 每次输出都是一样 [/quote] 因为你的需求就是这样的。你想要什么效果呢?[/quote] 是每运行一次 要把前四个元素添加到List的尾部. 0 1 2 3 4 5 6 4 5 6 0 1 2 3 这样的
wleexi 2013-07-27
  • 打赏
  • 举报
回复
引用 11 楼 wleexi 的回复:
[quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] API上说 " 如果正在进行此操作时修改指定的 collection ,那么此操作的行为是不确定的。(这意味着如果指定的 collection 是此列表且此列表是非空的,那么此调用的行为是不确定的)。 " 是不是这个关系 [/quote] 需求是每次运行程序,把第一个元素放到最后一位, 0 1 2 3 4 5 6 1 2 3 4 5 6 0 这样的
oh_Maxy 2013-07-27
  • 打赏
  • 举报
回复
引用 9 楼 wleexi 的回复:
[quote=引用 7 楼 oh_Maxy 的回复:] [quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] 每次输出都是一样 [/quote] 因为你的需求就是这样的。你想要什么效果呢?
wleexi 2013-07-27
  • 打赏
  • 举报
回复
引用 7 楼 oh_Maxy 的回复:
[quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] API上说 " 如果正在进行此操作时修改指定的 collection ,那么此操作的行为是不确定的。(这意味着如果指定的 collection 是此列表且此列表是非空的,那么此调用的行为是不确定的)。 " 是不是这个关系
小丑哥_V5 2013-07-27
  • 打赏
  • 举报
回复
循环中,不好操作元素的增删,用中间变量来存储
wleexi 2013-07-27
  • 打赏
  • 举报
回复
引用 7 楼 oh_Maxy 的回复:
[quote=引用 5 楼 wleexi 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] 另外,真实项目中,对list循环的时候,做remove和add操作,是大忌。
debug看过了..是我理解错了...那我现在这个需求该如何改变才能实现 [/quote]

    public static void test2() {
        List<Integer> data = new ArrayList<Integer>();
        data.add(0);
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        data.add(6);
 
        //用来存放不要的数据
        List<Integer> delData = new ArrayList<Integer>();
        //用来存放要增加的数据
        List<Integer> addData = new ArrayList<Integer>();
        System.out.println(data.toString());
         
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
 
        //复用
        delData.clear();
        addData.clear();
        for (int i = 0; i < data.size(); i++) {
             
            addData.add(data.get(i));//data.add(data.get(i));
            delData.add(data.get(i));//data.remove(data.get(i));
        }
        //统一删、增
        data.removeAll(delData);
        data.addAll(addData);
        System.out.println(data.toString());
    }
[/quote] 每次输出都是一样
dahlwuyn 2013-07-27
  • 打赏
  • 举报
回复
调试,你会明白的
加载更多回复(7)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧