List赋值问题
问题
业务中使用到随机获取list列表数据,需要remove元素,需要多次抽取原来的随机数列表,又不想动原来的list,所以新建一个中间的list,那么问题来了!
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
List<String> list2 = new ArrayList<>();
list2 = list;
list2.remove(0);
list2.remove("3");
System.out.println(list);
System.out.println(list2);
结果:
[2]
[2]
修改了原来的list
所以采用另一种方式创建
解决方式
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
List<String> list2 = new ArrayList<>(list);
list2.remove(0);
list2.remove("3");
System.out.println(list);
System.out.println(list2);
结果:
[1, 2, 3]
[2]
list随机抽取元素
List<String> list = new ArrayList<>();
//list有100元素
List<String> randomList = new ArrayList<>();
// 初始化随机数
Random rand = new Random();
// 取得集合的长度,for循环使用
size = 50;
// 遍历整个items数组
for (int i = 0; i < size; i++) {
// 任意取一个0~size的整数,注意此处的items.size()是变化的,所以不能用前面的size会发生数组越界的异常
int myRand = rand.nextInt(list.size());
//将取出的这个元素放到存放结果的集合中
randomList.add(list.get(myRand));
//从原始集合中删除该元素防止重复。注意,items数组大小发生了改变
newList.remove(myRand);
}