从arraylist中随机获取对象

时间:2014-03-06 15:39:43

标签: java arraylist map

我有一个数组,里面有50 Object个。

每次应用启动时,我想从List中随机获取4个对象。

而不是把它们放在Map

如何从数组中随机取出4个对象?

这是我的代码示例:

ArrayList<Deal> dealsTodayArray = dealsToday.getDeals(); 
Map<String, Object> map = new HashMap<String, Object>();
map.put("dealsTodayFirst", dealsTodayFirst);
map.put("dealsTodaySecond", dealsTodaySecond);
map.put("dealsTodayThird", dealsTodayThird);
map.put("dealsTodayForth", dealsTodayForth);

5 个答案:

答案 0 :(得分:5)

尝试Collections.shuffleCollections.subList的组合:

List<String> myStrings = new ArrayList<String>();
myStrings.add("a");
myStrings.add("b");
myStrings.add("c");
myStrings.add("d");
myStrings.add("e");
myStrings.add("f");
Collections.shuffle(myStrings);
System.out.println(myStrings.subList(0, 4));

输出(可能但不保证每次执行时都会更改):

[c, b, f, d]

答案 1 :(得分:1)

您可以使用Random类在ArrayList的范围内生成随机索引。

Random rand = new Random();
int size = dealsTodayArray.size();
map.put("dealsTodayFirst", dealsTodayArray.get(rand.nextInt(size)));
// repeat with the 3 others...

答案 2 :(得分:1)

您需要使用get类,Random类。使用Random类生成元素的索引,并使用get方法检索它。

示例

Random random = new Random();

Deal deal = dealsTodayArray.get(random.nextInt(50));
// And repeat a few more times.

答案 3 :(得分:0)

创建一个Random并在循环中生成一个索引以从列表中选择和检索。

答案 4 :(得分:0)

如果安全性是一个问题,请尝试以下方法之一:

方法1

Random sr = new SecureRandom();
Collections.shuffle(dealsTodayArray, sr);

final int N = 4;
for( int i=0; i<N; i++ ) {
    map.put("dealsTodayFirst", dealsTodayArray.get(i));
}

方法2

Random sr = new SecureRandom();
final int N = 4;
final int len = dealsTodayArray.size();
for( int i=0; i<N; i++ ) {
    map.put("dealsTodayFirst", dealsTodayArray.get(sr.nextInt(len)));
}