一.I/O流
Java中流的四大基类(超类)
|
输入流 |
输出流 |
字节流 |
inputstream |
outputstream |
字符流 |
Reader |
Writer |
操作流:
读进来:进来,说明使用输入流,读是输入流中的一个方法(read)
写出去: 出去,说明使用输出流,写是输出流中的一个方法(write)
在java中,如果程序暴露出来的仅仅是一个Inputstream/Outputstream,此时使用字节转换字符流
InputStream ——>InputstreamReader : 字节输入流——>字符输入流
OutputStream——>OutputstreamReader :字节输出流——>字符输出流
文件的字符流:
文件的字节流:每次操作的单位都是一个字节(byte)
文件的字符流:每次操作的单位都是一个字符(char)
若文章中存在中文,则建议使用字符流,任何情况下都可以使用字节流,但操作二进制文件的时候只能用字节流。
注:所有的流在使用完毕都必须关闭。
下面给一个文件拷贝的案例:
public class Test {
public static void main(String[] args)throws IOException {
//1.创建源和目标
File src = new File("E:/src");
File dest= new File("E:/dest");
//2.创建输入输出流对象(管道)
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] bytes = new byte[5];
//3.返回-1表示文件已读取完
int len = -1;
//4.读进来
while((len = in.read(bytes)) != -1) {
//5.写出去
out.write(bytes, 0, len);
}
//6.关闭流对象
in.close();
out.close();
}
}
二.集合
ArrayList:有序重复,基于数组的集合类,变长数组,vector是ArrayList的前身。(多用于查询)
遍历集合 for( int i=0 : i<list.size(); i++){
System.out.println(list.get(i));
}
LinkedList:有序重复,双向链表,底层使用的是链表(多用于插入,删除)
HashSet:无序不重复
LinkdHashSet:有序不重复
TreeSet:自然排序,底层采用红黑树算法
- 自然排序:调用集合元素的compareTo()来比较元素的大小的,然后按照元素的升序排序从小到大。要想排序,需要事先comparable接口重写compareTo方法,再该方法里编写自己的排序规则,比较当前你this对象和参数对象的数据
- 定制排序:在TreeSet构造器中传递java.lang.comparator对象,并覆盖compare(),再编写比较规则。
Map集合中的常用类:
HashMap:采用哈希算法,无序不重复
TreeMap:采用红黑树算法,自然排序不重复
LinkedHashMap:有序不重复
注:一般情况下,定义Map集合时,key都使用String类型(不可变),把key作为value的唯一名称HashMap,LinkedHashMap,TreeMap都是线程不安全的,但性能高。
List Map Set之间的相互转换
- List list = new ArrayList();
//将list转换为set
Set set = new HashSet(list);
//将set转换为list
list = new ArrayList(set);
Map不可以直接转换为list或set集合,但可以将map间接的转换为set或list
——>set 使用 map.keyset()
——>list 使用 map.values()
集合工具类(Collection接口和Collections类)
- Arrays:
把集合转换为数组
Object[] arr = 集合对象.toArray();
把数组转换为集合
List list= Arrays.asList(“A”,”B”,”C”); - Collections:封装了set,list,map的操作工具方法