1

からいくつかのランダムな値を選択する必要がありArrayListますが、値は複製できません。以下のコードでは、ランダムな値を選択するだけですが、重複する可能性があります。

    for (int i = 0; i < 5; i++) {

        index = random.nextInt(menuItems.size());
        HashMap<String, String> urls = new HashMap<String, String>();

        urls.put("Value", menuItems.get(index).get(KEY_URL));

        randomitems.add(urls);

    }
4

4 に答える 4

7

特定の順序で並べる必要がない場合はmenutItems、単純にシャッフルして最初の 5 項目を取ることができます。

Collections.shuffle(menuItems);
for (int i = 0; i < 5; i++) {
    HashMap<String, String> urls = new HashMap<String, String>();
    urls.put("Value", menuItems.get(i).get(KEY_URL));
    randomitems.add(urls);
}

そのままにしておく必要がある場合menuItemsは、最初にコピーを作成できます。

于 2013-03-06T21:08:59.983 に答える
0

はい、同じ数が再び与えられる可能性があるのは、ランダム性の性質上です。

それを取り除くには、新しい乱数を以前に受け取った乱数と照合して手動でチェックし、不要なものをすべてスローする必要があります。

于 2013-03-06T21:10:19.227 に答える
0

リストを複製して、古いリストを台無しにしないようにします

List<Object> randomList = new ArrayList<Object>(oldList);

一つを選ぶ

int index = new Random().nextInt(randomList.size());
Object randomObj = randomList.get(index);
randomList.remove(index);

そのため、1 つを選択するたびに、その 1 つを再度選択することはできません。

于 2013-03-06T21:10:29.087 に答える
0

ここであなたの質問のタイトルに答えています。a を使用しSetて、すべての数値が一意であることを確認し、必要なサイズになるまで数値の追加を停止しません。次に、次のように変換しますList

package com.sandbox;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

public class Sandbox {

    private static final int TOTAL_NUMBERS_I_WANT = 5;

    public static void main(String[] args) {
        Random random = new Random();
        Set<Integer> nonRepeatingRandomNumbers = new HashSet<Integer>();
        while (nonRepeatingRandomNumbers.size() < TOTAL_NUMBERS_I_WANT) {
            nonRepeatingRandomNumbers.add(random.nextInt());
        }
        List<Integer> result = new ArrayList<Integer>(nonRepeatingRandomNumbers);
        System.out.println(result);
    }
}
于 2013-03-06T21:14:49.957 に答える