1. 程式人生 > >java入門基礎學習----HashMap經典儲存

java入門基礎學習----HashMap經典儲存

一、分揀思路

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));
	}
}