从 Java HashMap 获取 Integer 值时是否需要调用 intValue() 方法?
Is calling intValue() method required when getting an Integer value from Java HashMap?
我有一个 HashMap 声明为:
Map<Character, Integer> dict = new HashMap<Character, Integer>();
在某个地方的代码中,我从上面的映射中获取一个字符的整数值。我观察到如果在获取整数值时不添加 .intValue()
方法,代码将无任何错误地终止,如果我将 intValue()
放在 ** 标记的区域它工作正常。
完整代码如下:
class Solution {
public String minWindow(String s, String t) {
int l =0, r = 0;
Map<Character, Integer> dict = new HashMap<Character, Integer>();
for(int i = 0; i < t.length(); i++){
int count = dict.getOrDefault(t.charAt(i), 0);
dict.put(t.charAt(i), count + 1);
}
int formed = 0;
int required = dict.size();
Map<Character, Integer> window = new HashMap<Character, Integer>();
int[] ans = {-1, 0, 0};
while(r < s.length()){
char c = s.charAt(r);
int count = window.getOrDefault(c, 0);
window.put(c, count + 1);
**if(dict.containsKey(c) && dict.get(c) == window.get(c)){
formed++;
}**
while(l <= r && formed == required){
if(ans[0] == -1 || r - l + 1 < ans[0]){
ans[0] = r - l + 1;
ans[1] = l;
ans[2] = r;
}
window.put(s.charAt(l), window.get(s.charAt(l)) - 1);
if(dict.containsKey(s.charAt(l)) && window.get(s.charAt(l)) < dict.get(s.charAt(l))){
formed--;
}
l++;
}
r++;
}
return ans[0] != -1 ? s.substring(ans[1], ans[2] + 1) : "";
}
public static void main(String[] args){
Solution s = new Soultion();
String ret = s.minwindow("ABCDEF", "BCD");
System.out.print(ret);
}
}
dict.get(c) == window.get(c)
是您比较 int
(s) 的方式;不幸的是,您正在比较 Integer
(s)。调用 intValue
以强制进行原始相等性比较是一种选择。另一个是 dict.get(c).equals(window.get(c))
我有一个 HashMap 声明为:
Map<Character, Integer> dict = new HashMap<Character, Integer>();
在某个地方的代码中,我从上面的映射中获取一个字符的整数值。我观察到如果在获取整数值时不添加 .intValue()
方法,代码将无任何错误地终止,如果我将 intValue()
放在 ** 标记的区域它工作正常。
完整代码如下:
class Solution {
public String minWindow(String s, String t) {
int l =0, r = 0;
Map<Character, Integer> dict = new HashMap<Character, Integer>();
for(int i = 0; i < t.length(); i++){
int count = dict.getOrDefault(t.charAt(i), 0);
dict.put(t.charAt(i), count + 1);
}
int formed = 0;
int required = dict.size();
Map<Character, Integer> window = new HashMap<Character, Integer>();
int[] ans = {-1, 0, 0};
while(r < s.length()){
char c = s.charAt(r);
int count = window.getOrDefault(c, 0);
window.put(c, count + 1);
**if(dict.containsKey(c) && dict.get(c) == window.get(c)){
formed++;
}**
while(l <= r && formed == required){
if(ans[0] == -1 || r - l + 1 < ans[0]){
ans[0] = r - l + 1;
ans[1] = l;
ans[2] = r;
}
window.put(s.charAt(l), window.get(s.charAt(l)) - 1);
if(dict.containsKey(s.charAt(l)) && window.get(s.charAt(l)) < dict.get(s.charAt(l))){
formed--;
}
l++;
}
r++;
}
return ans[0] != -1 ? s.substring(ans[1], ans[2] + 1) : "";
}
public static void main(String[] args){
Solution s = new Soultion();
String ret = s.minwindow("ABCDEF", "BCD");
System.out.print(ret);
}
}
dict.get(c) == window.get(c)
是您比较 int
(s) 的方式;不幸的是,您正在比较 Integer
(s)。调用 intValue
以强制进行原始相等性比较是一种选择。另一个是 dict.get(c).equals(window.get(c))