IO
ArrayList:使用的是数组结构,对于增加删除慢 查找快
LinkedList:使用的是双向链表结构,对于增加删除快 查找慢
remove:删除一定要在获取之后删除,因为直接删除并没有指向任何一个数据,直接删除程序会报错.
pervious:获取上一个数据,必须先往下走才能往上走,否则程序会报错
forEach:增强for循环,最早出现在c#中 用于迭代数组或集合
语法:for(数据类型 变量名: 集合或数组名){}
HashSet:散列存放,通过散列方式不能保证存储顺序,不能存储同一个元素。
Comparable:想要系统比较大小,用Comparable接口
在存储数据时两个数据一样大,那么从第二个开始不存此数据
因此在Comparable中不能存储相同数据
CompareTo: 当两个数据比较大小时,
this与0比较
返回数据类型:负数this小/零一样大/整数this大
public int compareTo(Person o) {
if(this.age>o.age){
return 1;
}else if(this.age==o.age){
return 0;
}
return -1;
}
//采用循环遍历的方法获取键和值
/* Set<String> set = date.keySet();
for(String k:set){
System.out.println(k+"->"+date.get(k));*/
1.Hashmap:
集合分两种: 1)单只存储Collection 2)多只存储map 两者同一级别
单只存储包括:不允许重复的Set,和允许重复的List
多只存储:存储的是一个个 键值对 的数据, Map(Mapping)的键不可重复
set集合使用map集合的键来存储数据从而实现不可重复的效果。
map:将键映射值的对象,地图不能包含重复的键,每个键最多可以映射一个值。
哈希表:
当哈希桶中的数据大于8,链表就会转换为黑红二叉树。
当哈希桶中的数据小于6,链表就会从红黑树转换为链表。
哈希桶的数据已知是7个,到六会转变链表吗?
看原来的链表是否到过8及其以上(从链表转换为黑红二叉树链表)
哈希桶的初始桶的数量是16;散列因子:当哈希桶半分之75以上都是数据那么就会对桶进行扩容,默认是扩容二倍。
Java中hashmap对于哈希表的实现。
2.Hashmap/Hashtable/ConcurrentHashMap三者之间有什么区别?(多线程,线程安全与否 多条路径数据在执行时放生了错乱这就是线程安全问题)
HashMap存在线程不安全的问题。
Hashtable线程安全:排队行为,效率慢
ConcurrentHashMap:采用分段锁机制,保证线程安全,效率比较高。
IO流的概述:
可以将数据的传输操作看做成数据的流动,按照流动方向可以分为输入流(InPut)和输出流(OutPut)。
Java中的IO操作主要指的是Java.io包下的一些常用类的使用,通过这些常用类对数据进行读取(输入)和写出(输出).
IO流的分类:
按照流动的方向来分可分为:输入流和输出流。
按照流动的数据方向来分可分为:字节流和字符流。
- 字节流:
输入流: InputStream
输出流: OutPutStream
- 字符流:
输入流: Reader
输出流: Writer
一切皆字节:计算机的任何数据(文本,图片,音乐等等)都以二进制存储的。
在数据传输时,也是以二进制传输的。
任何流,在底层的传输都是二进制。
OutPutStream :此抽象类,是表示字节输出的所有的超类
close();关闭输出流释放此流所有的有关资源。
FileOutputStream:文件输出流是用于将数据写入file或filedesctiptor的输出流。
文件是否可用或者是否可以创建取决于底层平台。
如何构造对象:
x.write();方法:里面传一个字节,一个字节数组或者是一个字节数组输出部分内容
InputStream:输入流。把硬盘里的文件读取到内存中。
数据流操作的:
当不知道文件需要读取多少次:返回值是否是-1,来判定是否需要循环
使用一组字节的读取方式 ,可以减少java代码io操作频率 .
字符流:解决当idea读取文字是所产生文字读一半产生的乱码情况 (字符流只能操作文字)
FileWriter fw=new FileWriter("D://b.txt");fw.append("您好")
转换流:将字节流装饰为字符流
FileWriter fw=new FileWriter("D://b.txt");
字符输出(打印流):
PrintStream,FileWriter:操作都是相同的 用后者需要.push和.close(刷新和关闭)
缓存冲输入流: 将字符输入流 转换带有缓冲的可以一次性缓存一行的字符读取流。
FileReader fr=new FileReader("D:/c.txt"); 字符流
BufferedReader br=new BufferedReader(fr); 字符输入流
String string = br.readLine();
string = br.readLine();
System.out.println(string);
怎么收集异常的日志
在异常常输出控制台的 .printStackTrace方法可传递一个参数(一个打印流)
创建一个打印流 PrintWriter可以将控制台的异常添加到文件里,另外也可以选择添加日期 SimleDateFormat 在用字符流调用println方法 使用forma传入
new date 。 (别忘了关闭流)
.properties文件与Properties类
Properties属于Map集合所以键=值,可以永久的存储数据.
.load方法:可以传一个字符流和字符流 把一个properties文件加载成程序中的map集合
.store:可以传一个字符流或者字符流 一个字符串