java map.get返回null_java – 为什么HashMap的get()在不应该返回null时返回null?

博客内容讲述了在Java中检查字符串是否包含唯一字符时遇到的问题。原始代码使用HashMap存储字符,但在判断字符是否已存在时出现错误。解决方案是将HashMap的键设置为Character,值为Boolean,正确地检查字符是否已存在于映射中。此外,还提出了使用HashSet作为更简洁的实现方式。

我写了一个方法来检查一个字符串是否只有唯一的字符.我发送明显的非唯一字符串“11”,它返回true而不是false.这是因为在if(tab.get(c)== null)中的get(c)中返回null,即使字符“1”已经在HashMap中.

我该怎么做才能获得预期的行为?

/* Check if a string contains only unique characters */

public static boolean isUniqueChars(String s) {

HashMap tab = new HashMap();

Character c;

for (int i = 0; i < s.length(); ++i) {

c = new Character(s.charAt(i));

if (tab.get(c) == null)

tab.put(Boolean.TRUE, c);

else

return false;

}

return true;

}

public static void main(String[] args) {

String s = "11";

System.out.println(isUniqueChars(s)); /* prints true! why?! */

}

解决方法:

你是按角色取物,但地图的键是布尔值.您希望键为Character,值为Boolean:

HashMap tab = new HashMap();

Character c;

for (int i = 0; i < s.length(); ++i) {

c = new Character(s.charAt(i));

if (tab.get(c) == null)

tab.put(c, Boolean.TRUE);

else

return false;

}

return true;

话说回来:

>您无需显式创建新角色.拳击会为你做到这一点.

>使用HashSet< Character>跟踪你到目前为止看到的角色会更简单.

例如:

Set set = new HashSet();

for (int i = 0; i < s.length(); i++) {

Character c = s.charAt(i);

// add returns true if the element was added (i.e. it's new) and false

// otherwise (we've seen this character before)

if (!set.add(c)) {

return false;

}

}

return true;

标签:java,hashmap

来源: https://codeday.me/bug/20190715/1467879.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值