“分拣”思路:类似于快递中的分拣员,把不同地区的快递分拣在一起,在java中也有这样的思想,将同种属性的对象分拣在一起,下面我来归纳下Map中两种分拣思路。
注明:我是在尚学堂视频上看到的关于分拣思路,觉得非常有用,便以博客的形式记录并分析下来。
题目,计算i am a good boy and she is a good girl that we fall in love这句话中出现某个单词的次数
准备工作:
package TestMap;
public class Letter {
private String name;
private int count;
public Letter() {
}
public Letter(String name, int count) {
super();
this.name = name;
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
1、为所有的key创建容器,之后放到对应的Value
public static void test01() {
//存入一句话
String str = "i am a good boy and she is a good girl";
//分割字符
String[] strArray = str.split(" "); //以空格为分隔符进行分割
//储存在Map中
Map<String,Letter> letters = new HashMap<String,Letter>();
//遍历
for(String temp:strArray) {
// 第一种思路
//为所有的key创建容器
if(!letters.containsKey(temp)) {
letters.put(temp, new Letter()); //创建新的容器
}
//在容器中放入对应的Value
Letter le = letters.get(temp); //直接使用容器
le.setCount(le.getCount()+1);
}
//输出Map值
Set<String> keys = letters.keySet();
for(String key:keys) {
Letter le = letters.get(key);
System.out.println("字母:"+key+",次数"+le.getCount());
}
}
2、第一次创建容器,并存放值Value;第二次之后,直接使用容器存储
public static void test02() {
//存入一句话
String str = "i am a good boy and she is a good girl";
//分割字符
String[] strArray = str.split(" "); //以空格为分隔符进行分割
//储存在Map中
Map<String,Letter> letters = new HashMap<String,Letter>();
//遍历
for(String temp:strArray) {
// 第二种思路
//第一次创建容器,并存放值Value
Letter le = null;
if(null == (le=letters.get(temp))) {
le = new Letter();
le.setCount(1); //第一次值存放
letters.put(temp, le);
}else {
//第二次之后,直接使用容器存储
le.setCount(le.getCount()+1); //已经有容器了
}
}
//输出Map值
Set<String> keys = letters.keySet();
for(String key:keys) {
Letter le = letters.get(key);
System.out.println("字母:"+key+",次数"+le.getCount());
}
}
3、测试
public static void main(String[] args) {
test01();
System.out.println("######################");
test02();
}
结果:
总结:“分拣”思路是极其重要的,需要掌握。