我需要一个可以高效地添加、删除和访问随机对象的Java数据结构。这是行不通的:ArrayList具有高效的添加(恒定时间)和随机访问(只是使用随机整数“获取”),但删除可能需要线性时间,因为它可能需要在整个列表中搜索它。TreeSet或HashSet具有高效的添加和删除,但我不知道如何获取随机对象。有什么想法吗?理论上,如果我可以自己用随机的左或右遍历树,B树就可以工作,但我认为标准的Java类没有给我这种能力。如果标准Java类中的任何内容都不起作用,我愿意使用第三方库。我不需要支持重复项或空值,也不需要线程安全。谢谢。 最佳答案
我正在开发一款简单的小游戏(主要是为了学习Java8和JavaFX中的新功能)。我拥有的功能之一是能够为游戏的随机数生成器提供种子,这样您就可以在不同的系统上与friend玩大致相同的游戏(想想Minecraftmap或The艾萨克的绑定(bind)游戏)。我想添加保存游戏以便稍后恢复的功能。查看java.util.Random类的文档后,我找不到获取随机数生成器当前种子的方法。我想出的在保存游戏后恢复随机数生成器的唯一方法是在保存时通过反射访问种子并使用它,或者在加载时播种初始种子并调用nextInt()一遍又一遍,直到我们将随机数生成器前滚到足以恢复游戏保存前的位置。
我需要用[a,..z]和[A,..,Z]1000随机字符初始化一个字符数组.我不想首先只生成[a,..z]之间的字符,然后只生成[A...Z]中的字符,但是平等对待所有52个字符。我知道一种方法是生成一个介于0和51之间的随机数,并为其分配一个字符值。我将如何解决这个问题或为0到51之间的随机数赋值? 最佳答案 您已经有了有趣的代码创意。这可能是想法。获取所有a-z和A-Z并将它们存储在数组[]中。随机生成一个介于1-52之间的数字(为此使用API类)。您将在第2步中得到一个数字,将其作为数组索引并从字符的array[]中选择该索引
在下面的代码中,它只调用了一个元素一次。当所有内容都被删除并且只剩下一个元素时,我怎样才能让它打印出“这是数组列表中的最后一个元素”。ArrayListResponselist=newArrayList();Responselist.add(CommentResponse());Responselist.add(TriviaResponse());Responselist.add(CriticResponse());String[]SelectRand=newString[3];for(inti=0;i 最佳答案 你可以控制数组列表
我有一个HashMap,我想在每次获得迭代器时以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前“打乱”map(或者,如果需要,“打乱”迭代器)。我有两个选择:1)使用LinkedHashMap的方法并在内部保留条目列表,将其就地打乱并在调用迭代器时返回该View。2)采用map.entrySet(),构造一个ArrayList并在其上使用shuffle()。虽然这两种方法看起来与我非常相似,但我期待非常大的HashMap,所以我真的很关心细节和内部结构,因为我真的不能浪费内存或计算。 最佳答案 重新洗牌一个大的集合
Java在包java.secure.random中提供了一个加密安全的随机数生成器。如果我考虑RNG的播种和循环重新实例化之类的事情,是否可以使用这个数字生成器?或者我可以“按原样”使用数字生成器吗?有人用过这个发电机吗?编辑:要求是:a)在统计上独立b)在他们的范围内公平分布(在统计预期范围内)c)通过各种公认的统计测试d)加密强度高。 最佳答案 正如其他人所说,安全RNG的吞吐量可能有限。为了减轻这个您可以通过播种CPRNG来扩展安全随机性,或者您可以尝试优化您对比特流的使用。打个比方,要洗一副牌,你只需要226位,但是一个na
我有以下内容:publicclassRandomList{privateListlist;publicListgetList(){returnlist;}publicRandomList(intn){list=newArrayList();Randomrand=newRandom();rand.setSeed(System.currentTimeMillis());for(inti=0;i这给了我一个充满随机整数值的列表。我想对此进行概括,以获取随机字符值列表或其他类型的随机值列表。所以我想要的是泛型版本,classRandomList.我可以用“T”替换所有“Integer”,但卡在
我一直对这个有点好奇。Math.random()给出[0.0,1.0)范围内的值。那么它能给出的最大值(value)是多少呢?换句话说,小于1.0的最接近1.0的double值是多少? 最佳答案 Java使用64位IEEE-754表示,因此理论上小于1的最接近数字是十六进制表示形式的3FEFFFFFFFFFFFFFF,符号为0,指数为-1,52位有效数为1.9999999999999997。这大约等于0.9999999999999998。引用文献:IEEE-754Calculator.
在未来的java版本中,以下程序是否保证生成具有相同内容和顺序的列表?importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.List;importjava.util.Random;publicclassTest{publicstaticvoidmain(String[]args){Listlist=newArrayList(Arrays.asList("A","B","C","D"));Collections.shuffle(list,newRandom(
仅仅是因为“大型API综合症”还是生成在某些情况下更偏向的随机数?如果是……我认为控制偏见很重要。 最佳答案 他们是一样的,真的。只是一个方便的方法。检查javadochere.此外,您可以通过创建随机对象来重新播种,而Math.random()将使用静态Random实例。 关于random-为什么JDK既有Math.random()又有Random类?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c