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
Iterator<String> ite = i.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}set是没有顺序的 所以没方法用下标获取
只能用set啊
但是我又想随机的获得map的key的值
我该怎么办
那我该如何随机的获取keySet里面的值呢?
楼主是是LinkedHashMap,这个里面键值对,会按照put的先后顺序排序,
但是,想要获得排好序的键集合,还得把那个Set转换成List才可以。
List集合里面的元素是有序的。
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在你遍历时以元素插入顺序返回简直对)