在Java中生成随机对象
我正在流程建模的背景下对GraphDatabase进行性能评估。 因此,我建立了一个简单的测试用例,跟踪嵌入N4J数据库的简单插入的性能。这是我的测试用例的摘录在Java中生成随机对象,java,random,arraylist,neo4j,spring-data-neo4j,Java,Random,Arraylist,Neo4j,Spring Data Neo4j,我正在流程建模的背景下对GraphDatabase进行性能评估。 因此,我建立了一个简单的测试用例,跟踪嵌入N4J数据库的简单插入的性能。这是我的测试用例的摘录 @Test public void insertQuants(){ int size =750; /** * create 10 different languages and store them in the ArrayList */ Arr
@Test
public void insertQuants(){
int size =750;
/**
* create 10 different languages and store them in the ArrayList
*/
ArrayList<Language> lngs = new ArrayList<Language>();
for(int i=0; i<10; i++){
String title = "Testsprache " + String.valueOf(i);
String description = "Beschreibung " +String.valueOf(i);
lngs.add(modelservice.createLanguage(title,description));
}
/**
* Create different models and assign them to different
* language objects
*/
for(int i=0; i<size; i++){
String title = "Testmodel " + String.valueOf(i);
//get random between 0 and 9
int fin = (int) Math.round(Math.random()*9);
//fetch random Language object out of ArrayList
Language l = lngs.get(fin);
Model m = modelservice.createModel(l, title);
l.addModel(m);
template.save(l);
}
@测试
公共void insertQuants(){
int size=750;
/**
*创建10种不同的语言并将它们存储在ArrayList中
*/
ArrayList lngs=新的ArrayList();
对于(int i=0;i这不是你的问题,但这是一个问题:Math.random返回0和1之间的双精度。将其乘以9和舍入并不能得到公平分布(0和9的出现频率仅为你希望的一半)。更改:
更像
Random randomGenerator = new Random();
...
int fin = randomGenerator.nextInt(10);
问题不在于随机分配:
int fin = (int) Math.round(Math.random()*9);
Math.random()
返回一个double
范围:[0,1)
,乘以9得到:[0,9)
,四舍五入得到[0,9]
。正如CPerkins指出的那样,使用random
看起来更简单,可能更好(因为生成数字0到9的概率与您的方法不一致),但您的随机数生成范围是正确的。问题不在您向我们展示的代码中。可能是在addModel()
或save()
中。它怎么不正确?9*[0,1)=[0,9]。四舍五入得到[0,9]。使用Random
看起来更简单,但他所拥有的却有效。它从来都不是1。他得到第9个值的频率会比其他值低,因为没有舍入。公平地说,0也是如此。编辑你的帖子。范围绝对是[0,9];尽管如此,这不是他的问题(他一直得到相同的数字)。我建议您进行更多的测试,一旦您对出现的问题有了更准确的了解,如果您无法解决问题,请发布另一个问题。感谢您的快速响应,我将仔细查看实现的addModel/save方法。代码正在工作,只是我在使用neoclipse跟踪存储节点方面缺乏能力在n4j:)中,但我将实现对随机元素的更改,以获得数字的均匀分布
int fin = (int) Math.round(Math.random()*9);