Java 中 Map 的常见用法都在这了

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

Map 是容器里非常重要的一块内容。

HashMap 是 Map 里经常用的实现类。一看到这里,B站的弹幕里就开始跑了:“LeetCode 必见 HashMap”,足以证明,掌握好 HashMap 有多重要。

关键的话记住:键不可重复。

硬要往里面加同一个键,技术上是可以的,但是含义上会把之前的键对应的值覆盖掉。就不过多解释了。

小白练习,花样出错

1 在新建了类以后,直接就开始:

Map<Integer, String> m1 = new HashMap<>(); // 实现类 m1.put(1,"One");

然后,这句话没有毛病,此刻 IDEA 的界面是这样的:
image.png

于是我那个信心满满,就开始跟着敲 put 的那一行语句,敲的时候,隐隐觉得不对劲:
image.png
为什么呢?

按了回车以后就变成了:

image.png

我不信邪,偏要跟着敲。
果然报错了:
image.png

而且为什么我明明有 m1,后面紧跟着就用了 m1,怎么上面被使用过的 m1 还是灰色的呢?

放上去以后提示:

Cannot resolve symbol ‘put’
我更郁闷了。我明明和老高一样。难道是前面 Map,后面是 HashMap?
image.png
不好意思,猜错了。

然后就开始百度 HashMap java,打开了菜鸟教程,发现人家也是差不多的:
image.png

后来,我老老实实百度了报错原因,第一个结果就告诉了我解决办法:
没有放在 main 方法里!

包进去以后,果然通通听话了:

image.png

低阶方法:

get(), size(), isEmpty(), containsKey(), containsValue()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Java复制代码public class TestMap {
public static void main(String[] args) {
Map<Integer, String> m1 = new HashMap<>(); // 实现类

m1.put(1,"One");
m1.put(2,"Two");
m1.put(3,"Three");
m1.put(4,"Four");

System.out.println("m1.get(1): " + m1.get(1));
System.out.println("m1.size(): " + m1.size());
System.out.println("m1.isEmpty(): " + m1.isEmpty());
System.out.println("m1.containsKey(3)" + m1.containsKey(3));
System.out.println("m1.containsValue("Five")" + m1.containsValue("Five"));

Map<Integer, String> m2 = new HashMap<>();
m2.put(5,"Five");
m2.put(6, "Six");
m1.putAll(m2);
System.out.println("m1.putAll(m2) 之后:\n" + m1);
}
}

在 Python 里是一个字典走天下:

  • get(): dict[key]
  • size(): len(dict)
  • isEmpty(): len(dict)==0
  • containsKey(): x in dict.keys()
  • containsValue(): x in dict.values()

哪里不会装哪里

上面一大块练习的代码,value 的类型都是字符串,现在来装个类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Java复制代码public class TestMap2 {
public static void main(String[] args) {

Employee e1 = new Employee(666, "Fang", 66666);
Employee e2 = new Employee(667, "张三", 9999999); // 因为他狂
Employee e3 = new Employee(668, "萌叔", 36888);

Map<Integer, Employee> map = new HashMap<>();
map.put(666, e1);
map.put(667, e2);
map.put(668, e3);
Employee emp = map.get(666); // 返回的就是对象
System.out.println(emp.getName());
}
}

类的信息是:(id,姓名,工资)+ JavaBean方法的 get 和 set,还有构造器。
运行结果如下:
image.png

Python 表示不服:

1
2
3
4
5
6
7
Python复制代码e1 = [666, "Fang", 66666]
e2 = [667, "张三", 9999999]
e3 = [668, "萌叔", 36888]
employees = {}
employees[666] = e1
employees[667] = e2
employees[668] = e3

也完全可以实现类似的用法。列表+字典暂时无敌。

又是期待新知识的一天呢!

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%