Java

Java散乱(二、集合,泛型,IO)

2018-06-07  本文已影响6人  强某某

集合

Collection接口

set存储自定义类,一定要重写equals()和hashcode()方法,当向set中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,此哈希值决定了此对象的set中的存储位置。若此位置之前没有对象存储,则这个对象直接存储到此位置,若此位置已有对象存储,再通过equals()比较两个对象是否相同,如果相同,后一个对象就不能再添加进来。

Map接口(键值对集合)

Collections工具类(操作Map和Collection)

泛型

解决元素存储的安全性问题(任何类型都可以添加到集合中,类型不安全)
解决获取数据元素时,需要类型强制转换的问题

注解Annotation

File

File f=new File("E.java");
File f1=new File("C:/Users/Administrator/Desktop/C.java");
boolean flag=f.renameTo(f1);
说明:修改文件名,其实时剪切文件并改名,要求:f必须存在而f1必须不存在

字节流中数据都是字符时,转成字符流操作更高效
- InputStreamReader
- OutputStreamWriter

为了方便操作基本数据类型的数据(读写),套接在InputStream和OutputStream上
- DataInputStream
- DataOutputStream

程序可以直接跳到文件的任意地方来读、写文件

r:只读方式打开,rw:打开以便读取和写入(是使用buffer的,只有cache满的或者使用RandomAccessFile.close()关闭流的时候儿才真正的写到文件),rwd:打开以便读取和写入,同步文件内容的更新(每个更新都会同步),rws:打开以便读取和写入,同步文件内容和元数据的更新。
readline:读取的内容会忽略换行符

换行符消失问题,原内容图一,执行后内容图二
File f1=new File("a.txt");
    RandomAccessFile ra=null;
    try {
        ra=new RandomAccessFile(f1, "rw");
        ra.seek(10);
        ra.write("csabcahc".getBytes());
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(ra!=null){
            try {
                ra.close();
            } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
说明:因为RandomAccessFile写内容其实是覆盖而不是插入,seek之后,第一行写入了"csabcahc"
这些字符,自动会向后,会覆盖掉本来第一行的换行符,导致第二行挤上来。
解决方案:使用字符读取的方式,先读取seek之后的内容(可以用StringBuffer存储),然后写"csabcahc",然后把读取的内容在从sb中在写入到文件中(之所以不用readline,是因为会忽略换行符,而sb作用就是可以保留换行符)。
图一.png 图二.png
上一篇下一篇

猜你喜欢

热点阅读