作业:
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遍历========================= */
时间: 2024-10-07 09:41:00