我想创建返回相同名字和姓氏数量的方法,但是当我尝试测试和编译代码时,我得到输出1,1,这不是真的。因为有10个相同的名字和10个相同的姓氏。
public class Solution
{
public static void main(String[] args)
{
HashMap<String, String> map = createMap();
System.out.println(getCountTheSameFirstName(map, "test"));
System.out.println(getCountTheSameLastName(map, "test"));
}
public static HashMap<String, String> createMap()
{
HashMap<String, String> odin = new HashMap<String, String>();
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
odin.put("test","test");
return odin;
}
public static int getCountTheSameFirstName(HashMap<String, String> map, String name)
{
int count = 0;
for(Map.Entry<String, String> lol : map.entrySet()){
String value = lol.getValue();
if(name.equals(value)){
count++;
}
}
return count;
}
public static int getCountTheSameLastName(HashMap<String, String> map, String familiy)
{
int count=0;
for (Map.Entry<String,String> pair : map.entrySet())
{
String key = pair.getKey();
if (familiy.equals(key))
{
count++;
}
}
return count;
}
}
答案 0 :(得分:2)
请参阅HashMap
- API,根据定义它是正确的:“将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。 “ (http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#put(K,V))
答案 1 :(得分:1)
您正在插入相同的密钥10
次。第一个put
可以正常工作,但每个后续put
都会使用相同的映射替换旧的键/值映射。最终结果是Map
中只有一个键/值对,因此您将1
作为输出。
答案 2 :(得分:1)
简而言之:您的方法在设计HashMap时有效 - 您使用相同的键强制放入HashMap并首次向map添加值,并且您只需更改此元素的值,因为它有同样的关键。
说明强>
您遇到这种情况 - 您创建了HashMap:
HashMap<String, String> odin = new HashMap<String, String>();
有第一个字符串键和第二个字符串值。使用line:
添加值时odin.put("test","test");
您是关键测试的设定值测试。
如果重复这一点,您将使用带有键测试的新元素
更改带有键测试的旧元素结果是输入的值被替换。
而不是这个,你必须使用唯一键放入HashMap其他东西(例如数组)。在这种情况下,您可以拥有10个具有相同值的输入。
以下是此HashMap的示例:
HashMap<String, String[]> odin = new HashMap<String, String[]>();
在这种情况下,你必须提供字符串键和字符串数组,其中包含值(问题中的名字和姓氏)。
答案 3 :(得分:1)
对不起!!如果你不使用重复键,那么你必须得到输出10&amp; 0
你的代码:我刚改变了密钥,得到了输出10&amp; 0:
public class Solution
{
public static void main(String[] args)
{
HashMap<String, String> map = createMap();
System.out.println(getCountTheSameFirstName(map, "test"));
System.out.println(getCountTheSameLastName(map, "test"));
}
public static HashMap<String, String> createMap()
{
HashMap<String, String> odin = new HashMap<String, String>();
odin.put("0","test");
odin.put("1","test");
odin.put("2","test");
odin.put("3","test");
odin.put("4","test");
odin.put("5","test");
odin.put("6","test");
odin.put("7","test");
odin.put("8","test");
odin.put("9","test");
return odin;
}
public static int getCountTheSameFirstName(HashMap<String, String> map, String name)
{
int count = 0;
for(Map.Entry<String, String> lol : map.entrySet()){
String value = lol.getValue();
if(name.equals(value)){
count++;
}
}
return count;
}
public static int getCountTheSameLastName(HashMap<String, String> map, String familiy)
{
int count=0;
for (Map.Entry<String,String> pair : map.entrySet())
{
String key = pair.getKey();
if (familiy.equals(key))
{
count++;
}
}
return count;
}
}