Map集合的嵌套和遍历
年级班级学生学号问题
package sunyuanze;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class t1201 {
//输出年级-班级-具体学号问题
public static void main(String[] args) {
//名单集合
Map<String,String> name=null;
//班级集合
Map<String,Map<String,String>> classes=null;
//年级集合
Map<String,Map<String,Map<String,String>>> grades=new HashMap<String,Map<String,Map<String,String>>>();
int no=1;
for(int i=1;i<=6;i++) {
//创建班级集合
classes=new HashMap<>();
grades.put(i+"年级", classes);
for(int j=1;j<=5;j++) {
//创建名单集合
name=new HashMap<>();
classes.put(i+"年级"+j+"班", name);
for(int k=1;k<=6;k++) {
//创建学号
name.put("NO."+i+"-"+j+"-"+k,"tom"+(no++));
}
}
}
//迭代输出
/*for(Entry<String,Map<String,Map<String,String>>> entry:grades.entrySet()) {
//年级名称
String key=entry.getKey();
//班级集合
Map<String, Map<String,String>> classes0=entry.getValue();
//先输出年级名称
System.out.println(key);
for(Entry<String, Map<String,String>> e:classes0.entrySet()) {
//班级名称
String className=e.getKey() ;
Map<String,String> v=e.getValue();
System.out.println("\t"+className);
for(Entry<String, String> e2:v.entrySet()) {
String xuehao =e2.getKey();
String mingcheng=e2.getValue();
System.out.println("\t\t"+xuehao+"-"+mingcheng);
}
}
}*/
//迭代器
Iterator<Entry<String,Map<String,Map<String,String>>>> it1=grades.entrySet().iterator();
while(it1.hasNext()){
Entry<String,Map<String,Map<String,String>>> e1= it1.next();
String k1=e1.getKey(); //年级名称
Map<String,Map<String,String>> v1=e1.getValue(); //一个年级(整个年级班级集合)
System.out.println(k1);
Iterator<Entry<String,Map<String,String>>> it2=v1.entrySet().iterator();
while(it2.hasNext()) {
Entry<String,Map<String,String>> e2=it2.next();
String k2=e2.getKey(); //班级名称
Map<String,String> v2=e2.getValue(); //一个班级(所有同学集合)
System.out.println("\t"+k2);
Iterator<Entry<String,String>> it3=v2.entrySet().iterator();
while(it3.hasNext()) {
Entry<String,String> e3=it3.next();
String k3=e3.getKey();
String v3=e3.getValue();
System.out.println("\t\t"+k3+"-"+v3);
}
}
}
}
}
List接口中常用类
Vector:线程安全,但速度慢,已被ArrayList替代。
ArrayList:线程不安全,查询速度快。
LinkedList:链表结构,增删速度快,取出List集合中元素的方式。
取出List集合中的元素的方式:
get(int index):通过脚标获取元素。
iterator():通过迭代方法获取迭代器对象。
函数的另一种表现形式
返回值类型 函数名(参数类型 … 形式参数)
{
执行语句;
}
其实接受的是一个数组,可以指定实际参数个数
IO
Input 和 output 流
-
io流用来处理设备之间的数据传输
-
java对数据的操作是通过流的方式
-
java用于操作流的对象都在io包中
-
流按操作分为两种(数据类型)
a. 字符流;操纵文本
b. 字节流;二进制文件 byte -
流按流向分为
a. 输入流;读操作
b. 输出流
IO流常用基本类
字节流的抽象基本类:
InputStream,OutputStream。
字符流的抽象基类:
Reader,Writer
FileWriter(常用类)
用于写入字符文件
java.io.FileWriter
1. new FileWriter(String str);
2. write(String str);
写入字符数据到流中
3. flush();
清理流,将流中数据写入到设备中
4.close();
关闭流,隐含着flush()操作
5.流在close()之后不能再写入
字符流-创建文件
创建流对象,建立数据存放文件
FileWriter fw=new FileWriter(“Test.txt”);
调用流对象的写入方法,将数据写入流
fw.write(“test”);
关闭流资源,并将流中的数据清空到文件中
fw.close();
package sunyuanze;
import java.io.FileWriter;
import java.io.IOException;
public class t1205 {
public static void main(String[] args) {
try {
FileWriter writer=new FileWriter("d:\\hello.txt");
writer.write("HELLO WORLD!");
writer.close();
System.out.println("ok");
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流-读取文件
建立一个流对象,将已存在的一个文件加载进流
FileReader fr = new FileReader(“Test.txt”);
创立一个临时存放数据的数组
char[] ch = new char[1024];
调用流对象的读取方法将流中的数据读入到数组中
fr.read(ch);
package sunyuanze;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class t12051 {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("d:\\hello.txt");
char[] buffer=new char[3];
int len=-1;
while((len=reader.read(buffer))!=-1) {
System.out.print(new String(buffer,0,len));
}
System.out.println("========================");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(reader!=null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
常用方法
flush 清理
refresh 刷新
clear 清空