Java 从地图中随机选择n个项目

Java 从地图中随机选择n个项目,java,list,random,arraylist,hashmap,Java,List,Random,Arraylist,Hashmap,我试图从HashMap中随机生成“n”个项目,其中“n”由用户确定 以下是我到目前为止的情况: public static void main(String []args){ int numColors = 3; HashMap<String, String> map = new HashMap<String, String>(); map.put("White","FFFFFF"); map.put("Blank","000000");

我试图从HashMap中随机生成“n”个项目,其中“n”由用户确定

以下是我到目前为止的情况:

public static void main(String []args){
    int numColors = 3;
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("White","FFFFFF");
    map.put("Blank","000000");
    map.put("Red","ED0A15");
    map.put("Green","06F76C");
    map.put("Blue","0689FF");
    map.put("Sky Blue","00C2FC");
    map.put("Light Blue","08F0FC");
    map.put("Silver","C0BFC5");
    map.put("Mint","ABD3CA");
    map.put("Off White","FFEFF0");
    map.put("Purple","736FFA");
    map.put("Lavendar","DEBEEF");
    map.put("Hot Pink","F5159A");
    map.put("Pink","DB39CC");
    map.put("Light Pink","F5C2E3");
    map.put("Blush","C95FA7");
    map.put("Orange","D4361B");
    map.put("Yellow","DEF231");
    map.put("Warm White","F3E4C3");
    map.put("Turquoise","01DCA4");

    List<String> valuesList = new ArrayList<String>(map.values());
    int randomIndex = new Random().nextInt(valuesList.size());
    String randomValue = valuesList.get(randomIndex);

    System.out.printf(randomValue);
}
publicstaticvoidmain(字符串[]args){
int numColors=3;
HashMap=newHashMap();
地图。放置(“白色”、“FFFFFF”);
map.put(“空白”、“000000”);
地图放置(“红色”、“ED0A15”);
地图放置(“绿色”、“06F76C”);
地图放置(“蓝色”、“0689FF”);
地图放置(“天蓝色”、“00C2FC”);
地图放置(“浅蓝色”、“08F0FC”);
地图放置(“银色”、“C0BFC5”);
地图放置(“造币厂”、“ABD3CA”);
地图。放置(“灰白色”、“FFEF0”);
地图放置(“紫色”、“736FFA”);
地图放置(“Lavendar”、“DEBEEF”);
地图放置(“热粉色”、“F5159A”);
地图放置(“粉色”、“DB39CC”);
地图放置(“淡粉色”、“F5C2E3”);
地图放置(“脸红”、“C95FA7”);
地图放置(“橙色”、“D4361B”);
地图放置(“黄色”、“DEF231”);
地图放置(“暖白色”、“F3E4C3”);
地图放置(“绿松石”、“01DCA4”);
列表值列表=新的ArrayList(map.values());
int randomIndex=new Random().nextInt(valuesList.size());
String randomValue=valuesList.get(随机索引);
系统输出打印F(随机值);
}
它为我打印我想要的1个随机颜色(十六进制),但是我不确定如何/使用哪个循环从地图生成3个随机十六进制颜色。我将numColors声明为3只是为了测试一下

以下是我最终的结果:

public static void main(String []args){
    int numColors = 3;
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("White","FFFFFF");
    map.put("Blank","000000");
    map.put("Red","ED0A15");
    map.put("Green","06F76C");
    map.put("Blue","0689FF");
    map.put("Sky Blue","00C2FC");
    map.put("Light Blue","08F0FC");
    map.put("Silver","C0BFC5");
    map.put("Mint","ABD3CA");
    map.put("Off White","FFEFF0");
    map.put("Purple","736FFA");
    map.put("Lavendar","DEBEEF");
    map.put("Hot Pink","F5159A");
    map.put("Pink","DB39CC");
    map.put("Light Pink","F5C2E3");
    map.put("Blush","C95FA7");
    map.put("Orange","D4361B");
    map.put("Yellow","DEF231");
    map.put("Warm White","F3E4C3");
    map.put("Turquoise","01DCA4");

    List<String> keys = new ArrayList<String>(map.keySet());
    Random rand = new Random();
    for (int i = 0; i < numColors; i++) {
        String key = keys.get(rand.nextInt(keys.size()));
        System.out.println(map.get(key));
        }

 }
publicstaticvoidmain(字符串[]args){
int numColors=3;
HashMap=newHashMap();
地图。放置(“白色”、“FFFFFF”);
map.put(“空白”、“000000”);
地图放置(“红色”、“ED0A15”);
地图放置(“绿色”、“06F76C”);
地图放置(“蓝色”、“0689FF”);
地图放置(“天蓝色”、“00C2FC”);
地图放置(“浅蓝色”、“08F0FC”);
地图放置(“银色”、“C0BFC5”);
地图放置(“造币厂”、“ABD3CA”);
地图。放置(“灰白色”、“FFEF0”);
地图放置(“紫色”、“736FFA”);
地图放置(“Lavendar”、“DEBEEF”);
地图放置(“热粉色”、“F5159A”);
地图放置(“粉色”、“DB39CC”);
地图放置(“淡粉色”、“F5C2E3”);
地图放置(“脸红”、“C95FA7”);
地图放置(“橙色”、“D4361B”);
地图放置(“黄色”、“DEF231”);
地图放置(“暖白色”、“F3E4C3”);
地图放置(“绿松石”、“01DCA4”);
List keys=newarraylist(map.keySet());
Random rand=新的Random();
for(int i=0;i
如果我理解你的问题,你可以用

List<String> keys = new ArrayList<String>(map.keySet());
Random rand = new Random();
for (int i = 0; i < numColors; i++) {
    String key = keys.get(rand.nextInt(keys.size()));
    System.out.println(map.get(key));
}
List keys=new ArrayList(map.keySet());
Random rand=新的Random();
for(int i=0;i
注释中提到了更改

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        int numColors = 3;
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("White", "FFFFFF");
        map.put("Blank", "000000");
        map.put("Red", "ED0A15");
        map.put("Green", "06F76C");
        map.put("Blue", "0689FF");
        map.put("Sky Blue", "00C2FC");
        map.put("Light Blue", "08F0FC");
        map.put("Silver", "C0BFC5");
        map.put("Mint", "ABD3CA");
        map.put("Off White", "FFEFF0");
        map.put("Purple", "736FFA");
        map.put("Lavendar", "DEBEEF");
        map.put("Hot Pink", "F5159A");
        map.put("Pink", "DB39CC");
        map.put("Light Pink", "F5C2E3");
        map.put("Blush", "C95FA7");
        map.put("Orange", "D4361B");
        map.put("Yellow", "DEF231");
        map.put("Warm White", "F3E4C3");
        map.put("Turquoise", "01DCA4");

        // scanner for accepting values
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter number");
        int N = scan.nextInt();

        // random object for generating random values
        Random rand = new Random();

        // converting map values to list
        List<String> valuesList = new ArrayList<String>(map.values());

        for (int i = 1; i <= N; i++) {
            // choose random value
            int randomIndex = rand.nextInt(valuesList.size());
            // get value
            String randomValue = valuesList.get(randomIndex);
            // printing
            System.out.println("Random value " + i + " : " + randomValue);
        }
    }
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Random;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
int numColors=3;
HashMap=newHashMap();
地图。放置(“白色”、“FFFFFF”);
map.put(“空白”、“000000”);
地图放置(“红色”、“ED0A15”);
地图放置(“绿色”、“06F76C”);
地图放置(“蓝色”、“0689FF”);
地图放置(“天蓝色”、“00C2FC”);
地图放置(“浅蓝色”、“08F0FC”);
地图放置(“银色”、“C0BFC5”);
地图放置(“造币厂”、“ABD3CA”);
地图。放置(“灰白色”、“FFEF0”);
地图放置(“紫色”、“736FFA”);
地图放置(“Lavendar”、“DEBEEF”);
地图放置(“热粉色”、“F5159A”);
地图放置(“粉色”、“DB39CC”);
地图放置(“淡粉色”、“F5C2E3”);
地图放置(“脸红”、“C95FA7”);
地图放置(“橙色”、“D4361B”);
地图放置(“黄色”、“DEF231”);
地图放置(“暖白色”、“F3E4C3”);
地图放置(“绿松石”、“01DCA4”);
//用于接受值的扫描仪
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入编号”);
int N=scan.nextInt();
//用于生成随机值的随机对象
Random rand=新的Random();
//将贴图值转换为列表
列表值列表=新的ArrayList(map.values());

对于(inti=1;i来说,一个简单的解决方案是使用
Collections.shuffle(map)
对整个映射进行洗牌。然后对其进行迭代并拾取前n个元素

当然,如果地图很大,你只需要几个元素,这就没有意义了

编辑:


当然,使用此解决方案,您不会像Malt建议的那样获得任何重复条目,以防止重复并保持代码干净:

List<String> list = new ArrayList(map.values() );
Collections.shuffle(list);
List List=newarraylist(map.values());
集合。洗牌(列表);

试试for-loop如何。创建一个
Random
的实例,然后使用for-loop多次运行随机选择。是否要复制?我想要3种随机颜色,这样它可以复制,也可以不复制。@user3130128 for语句是我的代码示例中所需的,这是所有的映射元素,所以它不是很简单arge。注意到这可以防止重复结果可能会很好。谢谢Elliott,它工作得很好。只是一个附带问题,这个解决方案允许重复颜色正确吗?所以FFFFFF理论上可以出现两次。回答了我自己的问题,它确实允许重复。
List<String> list = new ArrayList(map.values() );
Collections.shuffle(list);