java中的映射-获取错误的映射大小
我试图理解Map接口在Java中是如何工作的。我试图做的是:遍历字符串数组,并为数组中的每个名称设置一个介于0到5之间的随机java中的映射-获取错误的映射大小,java,Java,我试图理解Map接口在Java中是如何工作的。我试图做的是:遍历字符串数组,并为数组中的每个名称设置一个介于0到5之间的随机等级。然后将等级映射到名称[i]。然而,映射大小变得很奇怪,尽管我在数组中有10个元素,map.size()在映射之后是5。为什么程序会多次计算相同的大小(请参见输出)?下面是代码和输出: import java.util.*; class MapInterfaceExample{ public static void main(Stri
等级。然后将等级
映射到名称[i]
。然而,映射大小变得很奇怪,尽管我在数组中有10个元素,map.size()
在映射之后是5。为什么程序会多次计算相同的大小(请参见输出)?下面是代码和输出:
import java.util.*;
class MapInterfaceExample{
public static void main(String[] args){
int grade = 0;
String[] name = {"Lisa", "Dan", "John", "Adam", "George", "Amanda", "Sarah", "James", "Derek", "Sam"};
Map<Integer,String> map=new HashMap<Integer,String>();
for(int i=0; i<name.length; i++){
grade = (int)(Math.random()*5+1);
map.put(grade, name[i]);
//System.out.println(grade + "\t"+ name[i]);
System.out.println("Size of map "+ map.size());}
}
}
import java.util.*;
类MapInterfaceExample{
公共静态void main(字符串[]args){
int等级=0;
String[]name={“Lisa”、“Dan”、“John”、“Adam”、“George”、“Amanda”、“Sarah”、“James”、“Derek”、“Sam”};
Map Map=newhashmap();
对于(int i=0;i将新值指定给同一个键将覆盖旧值,因此,如果最多有5个不同的键(1-5),则贴图的最大大小为5
你应该使用名称作为键,因为它们是唯一的。然后几个学生可以有相同的分数。你使用分数作为键
map.put(grade, name[i]);
由于等级的范围是[1,5]
,映射将不会大于5。提示:映射不允许重复键。您确定等级是键吗?如果是,您想收集所有具有相同等级的名称吗?检查映射时会发生什么魔法。put(name[i],grade)@Kayaman,啊,谢谢,我知道现在发生了什么。大小是由我从grade
@Pshemo中得到的值触发的,我如何得到0-5?谢谢。@Pshemo err是的,当然。@sumu00让我们从你现在拥有的开始:(int)(Math.random()*5+1);
Math.random()
只能从范围[0;1]生成值。
(或者让我们把它写成[0;0.9999999…]
)。当我们把它乘以5*[0;1)
时,它给了我们新的范围[0;4.99999999…]
。添加+1
后,范围变成[1;5.99999999]
。通过强制转换到(int)
我们删除.999…
部分,所以范围就是[1;5]
。如果你想得到[0;5]
你可以在施法之前创建范围[0;5.9999….]
要生成这样的范围,你需要6*[0;0.99999…]
。所以可以使用int value=(int)(6*Math.random())
@Pshemo生成这样的范围的值,这是一个很好的答案!非常感谢!谢谢,现在我明白了。