IT十八掌作业_java基础第十二天_集合

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

HashMap是Map的子类实现,是key-value结构的,其中key存储的是不重复的元素,HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

HashMap底层就是一个数组结构,数组的每一项又是一个链表。hashmap的查找机制是先用对象的hashcode得出一个地址用equals比较地址中的链表的各个元素如果相同取出对应的value值。

2.描述Hashset和HashMap的区别。

除开HashMap和Hashtable外,还有一个hash集合HashSet,有所区别的是HashSet不是key value结构,

仅仅是存储不重复的元素,相当于简化版的HashMap,只是包含HashMap中的key而已,HashSet内部就是使用HashMap实现,

只不过HashSet里面的HashMap所有的value都是同一个Object而已,因此HashSet也是非线程安全的,

此外,HashSet实现Set接口,Set接口继承Collection接口;HashMap实现Map接口,Map接口与Collection接口是同级的。

他们都具有不重复的特点,采用hash机制存储和查询。

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

10班,每个班50人。

package com.it18zhang.day12;

/*

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

* 10班,每个班50人。

* Map<Integer,Map<String,Student>>

* */

import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;

public class MapDemo {

public static void main(String[] args) {

//创建班级集合

Map<Integer,Map<String,String>> classes = new HashMap<Integer,Map<String,String>>();

//创建一个班级

Map<String,String> names = null;

int no = 1;

//向班级集合中添加班级

for(int i =1 ; i <= 10; i++){

names = new HashMap<String,String>();

classes.put(i, names);

//向班级中添加50个学生

for(int j=1 ; j<=50; j++){

names.put(i+"."+j, "tom"+no);

no++;

}

}

System.out.println("\n------------------------entrySet-------------------------\n");

//遍历班级集合的entrySet

for(Entry<Integer,Map<String,String>> entry : classes.entrySet()){

//班级号

Integer key = entry.getKey();

//名单集合

Map<String,String> values = entry.getValue();

//遍历名单集合

for(Entry<String,String> entry2 : values.entrySet()){

String stuNo = entry2.getKey();

String stuName = entry2.getValue();

System.out.println(key+"\t===>\t"+stuNo+"\t-->\t"+stuName);

}

}

System.out.println("\n-------------------------------keySet-----------------------------\n");

//遍历班级集合的keySet

for(Integer classNo : classes.keySet()){

//获取班级Map

Map<String,String> map = classes.get(classNo);

//使用keySet遍历班级Map

for(String stuNo : map.keySet()){

String name = map.get(stuNo);

System.out.println(classNo+"\t===\t"+stuNo+"\t===\t"+name);

}

}

//

}

}

4.编程实现文本文件的复制。合理设计程序,得到缓冲区的大小的高效区间。

提示缓冲区设置1k开始,不超过10M。

package com.it18zhang.day12;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class CopyFileDemo {

public static void main(String[] args) {

//获取系统属性行分割符

String str = System.getProperty("line.separator");

System.out.println(str);

//创建待复制文件和目标文件

String srcFile = "d:\\aa.txt";

String targFile = "d:\\bb.txt";

//定义文件字符读取和写入流

FileReader reader = null;

FileWriter writer = null;

try{

//将流指向文件路径

reader = new FileReader(srcFile);

writer = new FileWriter(targFile,false);

//创建字符缓冲数组,用于批量读取写入字符

char[] buf = new char[2];

int len = 0;

while((len = reader.read(buf)) != -1){

writer.write(buf,0,len);

}

System.out.println("------copy over--------");

}

catch(IOException e){

e.printStackTrace();

}

finally{

try{

if(reader != null)

reader.close();

if(writer != null)

writer.close();

}

catch(IOException e1){

e1.printStackTrace();

}

}

}

}

时间: 2024-10-14 13:16:49

IT十八掌作业_java基础第十二天_集合的相关文章

IT十八掌作业_java基础第八天_多线程

感觉大家对IT十八掌大数据的支持,今天的作业如下 1. 5辆汽车过山洞,依次经过山洞.每辆车通过山洞花费10秒,使用多线程实现. 2. 用多线程模拟蜜蜂和熊的关系. 蜜蜂是生产者,熊是消费者.蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程. 生产者和消费者之间使用通知方式告知对方.注意不能出现死锁的现象.

IT十八掌作业_java基础第九天_多线程、自动拆装箱

1.蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉.蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s. 十只蜜蜂和两只熊. class Bee extends Thread{ private int bag; private static final int BAG_MAX = 20; private static final int ONCE = 5; private static final int TIME = 10 ; private Box box; private Strin

IT十八掌作业_java基础第二天_进制转换原理和补码存储方式

1.负数的表现形式,为什么如此设计? 答: 负数以原码的补码形式表达. 正负数相加得0,溢出最高位,正好等于0. 2.-128是在内存中是如何存储的?推算过程 答: -128二进制的结果是10000000(按照8位算),与原码一样. 3.如果字节表示为11111111,则其真实数据是多少? 答: 11111111的原码是0000 0001,所以11111111的真是数据是-1. 4.正负数是否都支持补码的方式? 答: 都支持 5.正数是否是负数的减一取反? 答: 是.

IT十八掌作业_java基础第26天_Java基础总结/虚拟机基础

感谢大家对IT十八掌大数据的支持,今天的作业如下: 巩固java基础知识,安装虚拟机! --------------------------------------------------------------------------------------------------------答案略,自行练习

IT十八掌作业_java基础第25天_NIO

感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.将NIO中的Socket通信过程使用图形进行描述和说明. 2.画图说明Runtime data area的内部结构. 3.阐述class的类加载过程. 4.反射和内省的异同,以及各自的优缺点. 5.阐述jvm中从堆和非堆的角度阐述jvm的内存结构.

IT十八掌作业_java基础第十七天_QQ案例

感谢大家对IT十八掌大数据的支持,今天的作业如下: 按照老师讲的,自己练习项目

IT十八掌作业_java基础第23天_数据库连接池\反射

感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.属性赋值 ------------- 1.Man{50+ } Man man = new Man(); man.setXxx1(...); man.setXxx2(...); ... 50 Man copy = new Man(); copy = man ; copy.setXxx1(man.getXxx1()); copy.setXxx1(man.getXxx1()); copy.setXxx1(man.getXxx1()); copy.

IT十八掌作业_java基础第六天_接口与适配器模式、多态、内部类

[作业1] ------------------------------------ 使用抽象类和接口实现适配器模式设计.涉及的类和接口分别为ButtonListener(接口), 其中含有click() / dbclick() / keyUp() / keyDown()等方法. ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现. Button类中添加addListener(ButtonListener l)方法. interface ButtonListe

IT十八掌作业_java基础第三天_数组

/* 1.定义一个函数,函数功能是动态提取int[]中元素的最大值. 2.定义一个函数,从数组中查询指定的元素首次出现的位置. 3.定义函数,完成冒泡排序,大数下沉. 4.折半查找. 5.阐述 6.定义一个函数,实现矩阵的转置.arr[i][j] == arr[j][i];//前提条件是正方的. 7.遍历三维组数,横向输出三维数组的每一个层. 8.定义一个类:Dog 有名称 color age cry(); 9.阐述出来堆区,栈区,何时出现溢出,如何解决. 10.oop ------------