作业:

1.描述HashMap内部实现原理。

HashMap存的是K-V对,K是唯一的不重复的.

原理:

现将hascode进行处理(Hascode右移16位后与自身进行异或运算,目的是将值打散因为如果进行或运算或者与运算会时结果偏大或偏小)然后该值和集合的容量(一般是15)进行与运算,得到一个介于0-15之间的值,该值表示该元素落在的数组下标,也就是该元素储存在数组中的存储位置。Hash散列方法效率较高,是针对关键词搜索的算法,当搜于某个元素时,通过Hash方法可以将搜索范围落在指定位置上,提升了HashMap的搜索速度。同时存储时如果计算出的介于0-15的值所在的位置为空,则直接将key放到该位置上,如果该位置上非空则首先比较第一个元素的Hashcode值与需要存储的元素的Hashcode是否相同,若不同则在位置的最后一个元素末尾加入该元素,若Hashcode值相同在进行==||equals()判断如果也相同则不能插入,若不同则同上面方法。


2.描述Hashset和HashMap的区别。

Hashset:Hashset集合内部是通过HashMap进行实现的。使用的是HashMap中key部分。实现set接口,set继承collection接口

HashMap:实现Map接口,Map接口与Collection接口是同级的。

它们都具有不重复的特点,采用hash机制进行存储。


3.年级的集合使用Map的嵌套实现。

  10班,每个班50人。


代码:

package twelve;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class NestMapDemo {

	public static void main(String[] args) {
		
		
		Map<Integer,Map<String,String>> classes=new HashMap<Integer,Map<String,String>>();
		Map<String,String> students = null ;
		//班级
		for(int i=1;i<11;i++){
			//每个班级的学生
			students = new HashMap<String,String>();
			classes.put(i,students);
			for(int j=1;j<51;j++){
				students.put(i+"."+j, "Kal "+j);
			}
		}
		System.out.println("EntrySet遍历=========================") ;
		for(Entry<Integer,Map<String,String>> classe :classes.entrySet()){
			// 班号
			Integer classnos=classe.getKey();
			Map<String,String> studentsmap=classe.getValue();
			for(Entry<String,String> entry : studentsmap.entrySet()){
				String stuNo = entry.getKey();
				//名称
				String stuName = entry.getValue();
				System.out.println("班级 " +classnos + " 学号 " + stuNo + " 学生 " + stuName) ;
			}
			}
		System.out.println("KeySet遍历=========================") ;
		for(Integer classno : classes.keySet()){
				Map<String,String> studentsmap=classes.get(classno);
				for(String studentno :studentsmap.keySet()){
					System.out.println("班级: "+classno+" 学号: "+studentno+" 学生: "+studentsmap.get(studentno));
				}
		}
		}
		}
		
		
结果部分

/**
 EntrySet遍历=========================
班级 1 学号 1.23 学生 Kal 23
班级 1 学号 1.24 学生 Kal 24
班级 1 学号 1.21 学生 Kal 21
班级 1 学号 1.22 学生 Kal 22
班级 1 学号 1.20 学生 Kal 20
班级 1 学号 1.18 学生 Kal 18
班级 1 学号 1.19 学生 Kal 19
班级 1 学号 1.16 学生 Kal 16
班级 1 学号 1.17 学生 Kal 17
班级 1 学号 1.14 学生 Kal 14
班级 1 学号 1.15 学生 Kal 15
班级 1 学号 1.34 学生 Kal 34
班级 1 学号 1.35 学生 Kal 35
班级 1 学号 1.32 学生 Kal 32
班级 1 学号 1.33 学生 Kal 33
班级 1 学号 1.30 学生 Kal 30
班级 1 学号 1.31 学生 Kal 31
班级 1 学号 1.29 学生 Kal 29
班级 1 学号 1.1 学生 Kal 1
班级 1 学号 1.27 学生 Kal 27
班级 1 学号 1.2 学生 Kal 2
班级 1 学号 1.28 学生 Kal 28
班级 1 学号 1.3 学生 Kal 3
班级 1 学号 1.25 学生 Kal 25
班级 1 学号 1.4 学生 Kal 4
班级 1 学号 1.26 学生 Kal 26
班级 1 学号 1.5 学生 Kal 5
班级 1 学号 1.6 学生 Kal 6
班级 1 学号 1.7 学生 Kal 7
班级 1 学号 1.8 学生 Kal 8
班级 1 学号 1.9 学生 Kal 9
班级 1 学号 1.45 学生 Kal 45
班级 1 学号 1.46 学生 Kal 46
班级 1 学号 1.43 学生 Kal 43
班级 1 学号 1.44 学生 Kal 44
班级 1 学号 1.41 学生 Kal 41
班级 1 学号 1.42 学生 Kal 42
班级 1 学号 1.40 学生 Kal 40
班级 1 学号 1.38 学生 Kal 38
班级 1 学号 1.39 学生 Kal 39
班级 1 学号 1.36 学生 Kal 36
班级 1 学号 1.37 学生 Kal 37
班级 1 学号 1.12 学生 Kal 12
班级 1 学号 1.13 学生 Kal 13
班级 1 学号 1.10 学生 Kal 10
班级 1 学号 1.11 学生 Kal 11
班级 1 学号 1.50 学生 Kal 50
班级 1 学号 1.49 学生 Kal 49
班级 1 学号 1.47 学生 Kal 47
班级 1 学号 1.48 学生 Kal 48
班级 10 学号 10.50 学生 Kal 50
班级 10 学号 10.11 学生 Kal 11
班级 10 学号 10.10 学生 Kal 10
班级 10 学号 10.13 学生 Kal 13
班级 10 学号 10.12 学生 Kal 12
班级 10 学号 10.15 学生 Kal 15
班级 10 学号 10.14 学生 Kal 14
班级 10 学号 10.17 学生 Kal 17
班级 10 学号 10.16 学生 Kal 16
班级 10 学号 10.19 学生 Kal 19
班级 10 学号 10.18 学生 Kal 18
班级 10 学号 10.20 学生 Kal 20
班级 10 学号 10.22 学生 Kal 22
班级 10 学号 10.21 学生 Kal 21
班级 10 学号 10.6 学生 Kal 6
班级 10 学号 10.5 学生 Kal 5
班级 10 学号 10.4 学生 Kal 4
班级 10 学号 10.3 学生 Kal 3
班级 10 学号 10.2 学生 Kal 2
班级 10 学号 10.1 学生 Kal 1
班级 10 学号 10.24 学生 Kal 24
班级 10 学号 10.23 学生 Kal 23
班级 10 学号 10.26 学生 Kal 26
班级 10 学号 10.25 学生 Kal 25
班级 10 学号 10.28 学生 Kal 28
班级 10 学号 10.9 学生 Kal 9
班级 10 学号 10.27 学生 Kal 27
班级 10 学号 10.8 学生 Kal 8
班级 10 学号 10.7 学生 Kal 7
班级 10 学号 10.29 学生 Kal 29
班级 10 学号 10.31 学生 Kal 31
班级 10 学号 10.30 学生 Kal 30
班级 10 学号 10.33 学生 Kal 33
班级 10 学号 10.32 学生 Kal 32
班级 10 学号 10.35 学生 Kal 35
班级 10 学号 10.34 学生 Kal 34
班级 10 学号 10.37 学生 Kal 37
班级 10 学号 10.36 学生 Kal 36
班级 10 学号 10.39 学生 Kal 39
班级 10 学号 10.38 学生 Kal 38
班级 10 学号 10.40 学生 Kal 40
班级 10 学号 10.42 学生 Kal 42
班级 10 学号 10.41 学生 Kal 41
班级 10 学号 10.44 学生 Kal 44
班级 10 学号 10.43 学生 Kal 43
班级 10 学号 10.46 学生 Kal 46
班级 10 学号 10.45 学生 Kal 45
班级 10 学号 10.48 学生 Kal 48
班级 10 学号 10.47 学生 Kal 47
班级 10 学号 10.49 学生 Kal 49
KeySet遍历=========================
 */