集合
Collection接口
- Set接口(元素无序,不可重复的集合,无序性:针对的是元素在底层存储的位置是无序的)
- HashSet
- LinkedHashSet
- TreeSet
- 添加的元素必须时同一个类的(其他例如,list,HashSet等都是可以添加任意类型的)
- 可以按照添加进集合的元素的指定的顺序遍历,例如String,包装类等默认按照从小到大的顺序遍历。
- 当自定义类没有实现Comparable接口时,当向TreeSet添加该类对应的对象时候,会报错,因为,TreeSet存储必须有个顺序,这个顺序计算规则就是实现Comparable接口后,重写的compareTo()方法
Map接口(键值对集合)
- HashMap:遍历顺序和添加顺序不见得相同(可以null键和值)
- LinkedHashMap:使用链表维护添加的顺序,保证遍历顺序和添加顺序相同
- TreeMap:按照添加进Map中的元素key的指定属性进行排序,key必须时同一个类的对象
- HashTable:线程安全(不可以null键和值)
- Properties:常用来处理属性文件,键和值都为String类型(例如:jdbc.properties文件)
Collections工具类(操作Map和Collection)
- 排序操作(均为static方法)
- reverse(List):反转List中元素的顺序
- shuffle(List):对List集合元素进行随机排序
- sort(List):根据元素的自然顺序对指定的List集合按照升序排序
-swap(List,int i,int j):将指定的List集合中的i处元素和j处元素互换
- 查找 替换
- Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
- 类似的有Object min(Collection)/Object min(Collection,Comparator)
- int frequency(Collection,Object):返回指定集合中指定元素出现的次数
- void copy(List dest,List src):将src内容复制到dest
- boolean replaceAll(List list,Object oldval,Object newval):使用新值替换list对象的所有旧值.
- Collections类中提供了多个synchronizedXXX()方法,该方法可使将指定集合包装成线程同步的集合,从而解决线程安全问题
泛型
注解Annotation
- JDK内置的基本注解类型(3个)
- Override:限定重写父类方法,该注释只能用于
- Deprecated:用于表示某个程序元素(类,方法等)已过时
- SupperessWarnings:抑制编译器警告
- 其他还有自定义注解和元注解,不常用
File
File f=new File("E.java");
File f1=new File("C:/Users/Administrator/Desktop/C.java");
boolean flag=f.renameTo(f1);
说明:修改文件名,其实时剪切文件并改名,要求:f必须存在而f1必须不存在
- 文件流
- FileInputStream
- FileOutputStream
- 缓冲流
- BufferedInputStream
- BufferedOutputStream(写完之后要加上flush())
- BufferedReader(除了通用的read()之外还有readLine())
- BufferedWriter(写完之后要加上flush())
- 转换流(字节流和字符流之间的相互转换)
- 打印流(可以打印到对应文件中)
- PrintStream 字节流
- PrintWriter 字符流
- 数据流
- RandomAccessFile
- long getFilePointer():获取文件记录指针的当前位置
- void seek(long pos):将文件记录指针定位到pos位置
- public RandomAccessFile(File file,String mode)
- public RandomAccessFile(String name,String mode)
换行符消失问题,原内容图一,执行后内容图二
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作用就是可以保留换行符)。

