第12天内容

作业:

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-08-07 13:04:46

第12天内容的相关文章

node.js不得不说的12点内容

1.node.js,服务器端的javascript,它允许在后端(脱离浏览器环境)运行javascript代码. 2.事件驱动.异步式I/O的编程模式(单线程)是其核心. 3.node.js的javascript引擎是v8,来自google chrome项目.V8号称是目前世界上最快的javascript引擎. 4.node.js内建了http服务器支持,也就是说你可以轻而易举地实现一个网站和服务器的组合. 5.commonnjs试图定义一套普通应用程序使用的api,从而填补javascript

2019/12/12学习内容摘要(Linux系统用户与用户组管理②)

5.命令 chfn 用于修改用户的finger (finger为 /etc/passwd 文件第五个字段中显示的信息) 三,用户密码管理 1.命令passwd  格式 passwd [username],若命令后不加名字则是为自己设定密码 (只有root用户才能修改其他账户的密码,普通账户只能修改自己的密码) 2. 命令mkpasswd 用于生成密码  使用如下命令安装软件包 选项[-l ]指定生成密码的长度 [-s]指定特殊字符的个数 [-d]指定数字的个数 四,用户命令切换 1.命令su  

获取Exe文件版本信息的函数(使用GetFileVersionInfo得到TFileVersionInfo结构体,包含12项内容)

Type   TFileVersionInfo   =   Record         FixedInfo:TVSFixedFileInfo;         {版本信息}         CompanyName:String;                         {公司名称}         FileDescription:String;                 {说明}         FileVersion:String;                      

Egret入门学习日记 --- 第二十四篇(书中 9.12~9.15 节 内容)

第二十四篇(书中 9.12~9.15 节 内容) 开始 9.12节 内容. 重点: 1.TextInput的使用,以及如何设置加密属性. 操作: 1.TextInput的使用,以及如何设置加密属性. 创建exml文件,拖入组件,设置好id. 这是显示密码星号处理的属性. 创建绑定类. 实例化,并运行. 但是焦点在密码输入框时,密码是显示的. 暂时不知道怎么设置 “焦点在密码框上时,还是显示为 * 号” 的方法. 至此,9.12节 内容结束. 开始 9.13节 . 这个,和TextInput的使用

jQuery.1.9 live 代替事件 on 新增内容无法触发事件

如果是新增 append 或者 html() 事件添加的内容,无法触发 click 事件, 在1.9 可以用live 事件来代替 1.9以后用 <div class="search-result-list"> <ul> <li data='11'>我是内容</li> <li data='12'>我是内容</li> </ul> </div> 如果<li>是新增的内容 , 就无法触发

12.14-Linux系统优化

12.14 内容: 1. 别名----day03 2. 系统版本  版本号  内核版本  32/64 3. 添加与切换用户 4. 环境变量的特点 5. 关闭SELinux  iptables Linux系统优化 1.你的系统是什么版本的 cat /etc/redhat-release    查看系统版本 内核版本+64位           CPU结构 Uname  -r      查看内核版本 Uname  -m   查看CPU结构 32位/64位 2.添加普通用户账号 useradd  +

sed入门详解教程

sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作.sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed 的具体用法,但是个人觉得没有必要去学习它的每个细节,那样没有特别大的实际意义.网上也有很多关于 sed 的教程,我也是抱着学习的心态来学习 sed 的常见的用法,并进行系统的总结,内容基本覆盖了 sed 的大部分的知识点.文中的内容比较简练,加以实际示例来帮助去理解 sed 的使用. 一.写在前边 1.sed介绍 se

Python接口测试自动化说明及代码实例:含get、post、put、delete等方法

一.接口说明文档 环境准备: 安装火狐 安装插件: httprequester https://addons.mozilla.org/en-US/firefox/addon/httprequester/ 接口返回码: 接口返回code说明: '00' : 成功 '01':用户已存在 '02':参数不合法 '03':参数错误(1.用户信息错误 2.参数错误,数据库中不存在相应数据) '999':未知错误,看后台日志 请求接口例子: Md5计算网站: http://md5jiami.51240.co

python爬虫:http请求头部(header)详解

本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/rfc2616/rfc2616 http://www.ietf.org/rfc/rfc3229.txt 通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成.HTTP的头域包括通用头,请求头,