问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java如何打乱arraylist中的对象,一定不能重复啊!

发布网友 发布时间:2022-05-16 01:50

我来回答

5个回答

热心网友 时间:2023-05-11 00:15

如果你不相重复,那用HashSet保证集合的元素不重复.
然后将为SET变为ArrayList

HashSet<String> set = new HashSet<String>();
set.add("1");
set.add("1");
ArrayList<String> list = new ArrayList<String>();

list.addAll(set);

如上.

你上面的代码,出现重复的原因是,你删除了一个元素,那么索引的值就变了,想插入回源来的位置,那就要减1.追问减1之后出现这个问题了

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: -1, Size: 39
at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:612)
at java.util.ArrayList.add(ArrayList.java:426)
at Pack.main(Pack.java:30)
我代码里的NUM_CARDS = 40

追答你不减也会出问题,

Briscola temp = pack.get(i);
pack.remove (i);
pack.add (i,pack.get(j));

就拿来这两句来说吧,
假设你J随机的是39,你移除了一个, 这样一GET也是这个问题,
我把这个数设成10,这样的问题常发生.

如果你想要乱序,我给你一个算法.如下.
--------------------------------------------------------------------------
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) throws Exception {
List pack = new ArrayList();
List result = new ArrayList();
int NUM_CARDS = 10;
for (int i = 0; i 0) {
int random = (int) (Math.random() * NUM_CARDS * 100);
random = random % pack.size();
result.add(pack.remove(random));
}

System.out.println(result);
}
}

热心网友 时间:2023-05-11 00:16

就像1楼说的.用set是最简单的方法
如果只能用ArrayList的话的就加个判断如果有重复元素的话就不加进去就行了
我把整个类从写了下.......
import java.util.ArrayList;

class NewClass
{
public static void main(String[] args)
{
int NUM_CARDS=5;
ArrayList<Integer> pack=new ArrayList<Integer>();
for ( int i = 0; i < NUM_CARDS; i++ )
{

int j = ( int ) ( Math.random() * NUM_CARDS );
if(a(pack,j))
{
pack.add(j);
}

}
for(int i1:pack)
{
System.out.print(i1);
}
}
static boolean a(ArrayList<Integer> al,int i)
{
for(int j:al)
{
if(j==i)
{
return false;
}
}
return true;
}

}

热心网友 时间:2023-05-11 00:16

这是我做的项目中用到的一点打乱题目顺序代码
int pages[] =new int[6]; //存题号
ArrayList<Integer> list=new ArrayList<Integer>();
for (int i = 0; i < pages.length; i++) {
list.add(i+1); //题号1,2,3...
}
Random r=new Random();
int i=0;
while (i < pages.length) {
int index=r.nextInt(list.size()); //随机生成一个 list 的index
pages[i]=list.get(index);//将其根据循环依次加入pages
list.remove(index);//移除这个项,下一次就不会再取到这个了
i++;
}

pages 就是打乱顺序后的题号

热心网友 时间:2023-05-11 00:17

就像楼上说的,加入i==j==NUM_CARDS-1,你这么做就会有问题。
建议你原数据还是不要动,再维护个list放数据,维护个map排重。乱写一个,没跑过,凑合看吧。

List<Briscola> otherList = new ArrayList<Briscola>();
Map<Integer,Integer> repeatMap = new HashMap<Integer,Integer>();
Random rand = new Random(new Date().getTime());//用系统时间作为随机的种子,每次都不一样
for ( int i = 0; i < NUM_CARDS; i++ )
{
int j = rand.nextInt(NUM_CARDS);
while(null != repeatMap.get(j)){
j = rand.nextInt(NUM_CARDS);
}
repeatMap.put(j,j);
otherList.add(pack.get(j));
}

热心网友 时间:2023-05-11 00:17

只要随即一个数,然后挑取出来插在最后,就不会有Bound的问题咯.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 域名实名认证后还要申请ICP备案吗? 数学中集合是不能存在重复元素的,为什么java中的list也叫集合? 想移民去新加坡,有没有达人帮找个网址专门说这个的?百度有说这,感觉杂而乱,新加坡官方的网址也可以。 怎么实现用java 把tif格式的图片转换成jpg 华为P30灭屏添加一张相片? 旧号被冻结无法解密。申请新的QQ显示该手机号有安全隐患,怎么办? 死亡通知单之离别曲大结局后面还有吗? 《死亡通知单之离别曲》的大结局是什么? 暗黑者第第三季所根据的小说 天津体育运动学校毕业后不是大专学历吗?可以考教师资格证,但现在想当老师不是至少要大学专科吗?求解 小说死亡通知单(不是电视剧)我只买暗黑者和宿命上下可以吗,到这里有没有一个结局,和离别曲有关系吗 在天津上哪所大学出来可以当老师?(除了天津师范大学) 在电脑上一个圈圈那个数字“0”怎么打? 自己心烦的时候怎么办 如何使网页直接打开word 网页中如何调用客户端 office?求大神帮助 求一篇关于跳远的文章 买房子一次性付款要注意哪些问题 买房一次性付清要注意什么问题? 购房一次性付款应该注意什么 Java中的Set集合 怎么保障不重复 DOSBOX PPC怎样挂载磁盘 《人与永恒》读后感 求一篇周国平的《人与永恒》的读后感 违章停车怎样判定? java 如何进行 bmp格式的图片转换成jpg格式 城管怎么判断违章停车 人与永恒阅读感悟 谁知道???十万火急!!! 请问怎么才算违章停车? 《人与永恒》 读书笔记 人与永恒读后感 违章停车罚款标准如何界定? 求《听听那冷雨》《论语心得》《平凡的世界》《唐诗三百首》《人与永恒》其中一本的读后感800字原创 在DOS怎么加载SATA的硬盘驱动 找几篇 周国平 冰心 等散文家的随笔 dos下怎么加载usb移动硬盘? 关于《周国平散文集》的读书笔记 dos里装载点是什么意思 请问执行器是做什么的呀,和阀门定位器有什么关系? 一篇关于跳高的作文