62,614
社区成员
发帖
与我相关
我的任务
分享
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());
}
}
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,请指教
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就可以了,那样复用性更高!
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.....每次登陆该页面展示的东西不一样...于是就想把每一次看过的往后移动
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;
}
}
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]
让我想起了循环队列
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]
好简洁...我的方法是在循环里面加了个判断....
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());
}
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)结果不一定了)。
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
这样的
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
这样的
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]
因为你的需求就是这样的。你想要什么效果呢?
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 是此列表且此列表是非空的,那么此调用的行为是不确定的)。
" 是不是这个关系
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]
每次输出都是一样