Java核心类库中的IO

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:可以传一个字符流或者字符流 一个字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值