public class test6 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("a", null);
map.put("b", "马先生");
map.put("c", "马先生");
map.put("1", "马先生");
map.put("2", "马先生");
map.put("3", "马先生");
map.put("4", "马先生");Set i = map.keySet();
//set集合应该为[3, 2, 1, b, c, 4, a]
System.out.println(i);int len = i.size(); //i 为7//获得set的集合长度 随机该长度下表的值
System.out.println(len);
Random random = new Random();
int key =random.nextInt(len); // key 为0到7之间任意的随机数 
?????????
如何获得set集合中 随机出来的那个下标的值
通过得到的随机下标值如何得到 "a " 或者 "b"
??????????
}JavarandommapkeySetJ2SE

解决方案 »

  1.   

    便利set可以用以下方法
    Iterator<String> ite = i.iterator();
    while(ite.hasNext()){
     System.out.println(ite.next());
    }set是没有顺序的  所以没方法用下标获取
      

  2.   

    Set既然没有顺序,你又想有顺序,那么你干脆转到List里面好了。List list = new ArrayList(i);
      

  3.   

    可是我是在Map里面获得map的key的集合
    只能用set啊
    但是我又想随机的获得map的key的值
    我该怎么办
      

  4.   


    那我该如何随机的获取keySet里面的值呢?
      

  5.   

    把keySet获取到的set里面的值转到一个List里,再用你随机到的下标值去获取list里的值
      

  6.   

    Set集合里面的元素是无序的,这个没办法搞定。
    楼主是是LinkedHashMap,这个里面键值对,会按照put的先后顺序排序,
    但是,想要获得排好序的键集合,还得把那个Set转换成List才可以。
    List集合里面的元素是有序的。
      

  7.   

    Map map = new HashMap();
    map.put("a", null);
    map.put("b", "马先生");
    map.put("c", "张先生");
    map.put("1", "李先生");
    map.put("2", "余先生");
    map.put("3", "P先生");
    map.put("4", "SB先生");

    Set<Map.Entry> set = map.entrySet();
    Object[] entryArray =   set.toArray();//谁能告诉我这步直接转换成Map.Entry[]数组,强制(Map.Entry[]) set.toArray()报错

    for (int i = 0; i < entryArray.length; i++) {
    Map.Entry entry=(Map.Entry)entryArray[i];
    System.out.println("i:"+i+"key:"+entry.getKey() + ":"
    + (entry.getValue()==null?"":entry.getValue()));
    }

    Random random = new Random();
    int key = random.nextInt(set.size()); 
    Map.Entry entry=(Map.Entry)entryArray[key];
    System.out.println(entry.getKey() + ":"
    + entry.getValue());
    即便把随机数key换成一个常量  比如3,如果你后续又插入的话 会导致结果变化。所以你可以换成LinkedHashMap,这样就能保证日后的插入式插入在末尾的。(LinkedHashMap在你遍历时以元素插入顺序返回简直对)
      

  8.   

    强制(Map.Entry[]) set.toArray()报错 Map.Entry[]) 实现是<k,v>形式 ,而数组只是所谓的单数据例如int a[] = {1,2,3};
      

  9.   

    如果不考虑应用场景,可以有 linkedhashmap