java入門基礎學習----HashMap經典儲存
阿新 • • 發佈:2019-02-19
一、分揀思路
package com.kennosaur.map; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * this is a cat and that is a mice and where is the food? * 統計每個單詞出現的次數 * * 儲存到Map中 * key: String * value:自定義型別 * * “分揀”思路 * 1.為所有key建立容器,之後容器中存放對應的value * 2.第一次建立容器,並存放值value;第二次之後,直接使用容器存放值 * * @author Administrator * */ public class Demo01 { public static void main(String[] args) { String str = "this is a cat and that is a mice and where is the food"; //分割字串 String[] strArray = str.split(" "); //儲存到map中 Map<String, Letter> letters = new HashMap<String, Letter>(); for (String temp : strArray) { /** * 2.第一次建立容器,並存放值value;第二次之後,直接使用容器存放值 */ // if (!letters.containsKey(temp)) { // Letter col = new Letter(); // col.setCount(1); //第一次的值存放到容器中 // letters.put(temp, col); // }else { // Letter col = letters.get(temp); // col.setCount(col.getCount()+1); // } Letter col = null; if (null==(col=letters.get(temp))) { col = new Letter(); col.setCount(1); //第一次的值存放到容器中 letters.put(temp, col); }else { col.setCount(col.getCount()+1); } } //輸出map的值 Set<String> keys = letters.keySet(); for (String key : keys) { Letter col = letters.get(key); System.out.println("字母"+key+"-次數"+col.getCount()); } } public void test01() { String str = "this is a cat and that is a mice and where is the food"; //分割字串 String[] strArray = str.split(" "); //儲存到map中 Map<String, Letter> letters = new HashMap<String, Letter>(); for (String temp : strArray) { /** * 1.為所有key建立容器,之後容器中存放對應的value */ if (!letters.containsKey(temp)) { letters.put(temp, new Letter()); } Letter col = letters.get(temp); col.setCount(col.getCount()+1); } //輸出map的值 Set<String> keys = letters.keySet(); for (String key : keys) { Letter col = letters.get(key); System.out.println("字母"+key+"-次數"+col.getCount()); } } }
二、分揀思路與面向物件解題
package com.kennosaur.map; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; /** * 定義一個Student類,屬性:name 姓名,classNumber 班號,score 成績 * 現在將若干Student物件放入List,請統計出每個班級的總分和平均分,分別打印出來 * 以面向物件的思維解決 * @author Administrator * */ public class Demo02 { public static void main(String[] args) { List<Student> list = new ArrayList<>(); exam(list); //統計 Map<String, ClassRoom> rooms = new HashMap<>(); count(rooms, list); //列印 printScore(rooms); } /** * 列印總分與平均分 * @param rooms */ public static void printScore(Map<String, ClassRoom> rooms) { Set<Map.Entry<String,ClassRoom>> entrySet = rooms.entrySet(); Iterator<Map.Entry<String,ClassRoom>> iterator = entrySet.iterator(); while (iterator.hasNext()) { Map.Entry<String,ClassRoom> entry = iterator.next(); ClassRoom room = entry.getValue(); double avg = room.getTotal()/room.getStudents().size(); System.out.println("班號為:"+room.getClassNumber()+",總分"+room.getTotal()+",平均分"+avg); } } /** * 統計分數 * @param rooms */ public static void count(Map<String, ClassRoom> rooms,List<Student> list) { for (Student stu : list) { String classnumber = stu.getClassNumber(); double score = stu.getScore(); //根據班級編號檢視map中是否存在班級 ClassRoom room = rooms.get(classnumber); if (null==room) { room = new ClassRoom(classnumber); rooms.put(classnumber, room); } room.setTotal(room.getTotal()+score); room.getStudents().add(stu);//加入學生 } } /** * 現在將若干Student物件放入List * @param list */ public static void exam(List<Student> list) { list.add(new Student("a", "001", 80)); list.add(new Student("b", "001", 80)); list.add(new Student("a", "002", 80)); list.add(new Student("c", "003", 80)); list.add(new Student("d", "003", 80)); } }