目标
昨天由于实在是不想写简述就没有写,于是今天我痛定思痛想把昨天的内容也补上去。昨天的昨天我们主要学习了文件如何写入和写出数据,今天我们学习了关于数组和集合的一些操作。
Java中文件数据的写入和写出
输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据。流是一组有序的数据序列,分为输出流和输入流。
Java的输入和输出功能来自于java.io包中的用于字节流的InputStream类和OutputStream类,以及用于字符流的Reader类和Writer类以及继承他们的各种子类。
Java中在文件中输入输出的步骤:
1 使用File类打开一个文件
2 通过字节流或字符流的子类,指定输出的位置
3 进行读/写操作
4 关闭输入/输出
第四点一般情况下容易遗忘,一定要记得关闭,因为是I/O流对象 不属于内存对象,需要自己关闭。
向文件写入数据
1.先创建一个文件
public class MyClass {
public static void main(String[] args) throws IOException{
//创建文件
String path = "C:/Users/51432/Desktop/Day7_Java/javaday1/src/main/java/javaday8";
File file = new File(path.concat("/1.txt"));
//判断是否存在
if(file.exists() == false){
//不存在就去创建
file.createNewFile();
}
2.如果是字节流输出
//1.创建文件输出流对象
FileOutputStream fos = new FileOutputStream(file);
//2.调用write方法写入
byte[] text = {'1','2','3','4'};
fos.write(text);
//3.操作完毕需要关闭stream对象
fos.close();
3.如果是字符流输出
FileWriter fw = new FileWriter(file);
char[] name = {'安','卓'};
fw.write(name);
fw.close();
读取时类似
读取字节流输入
FileInputStream fis = new FileInputStream(file);
byte[] name = new byte[6];
fis.read(name);
fis.close();
System.out.println(new String(name));
读取字符流输入
FileReader fr = new FileReader(file);
char[] book = new char[4];
fr.close();
System.out.println(new String(book));
数组和集合
我们经常利用数组来储存多个对象,可是数组也有着它的弊端。数组的长度不可变其内容可以改变,倒是当我们想要改变一个数组的内容且又想改变数组的长度时,使用数组会让我们的实际操作变得不灵活。
这时我们选择使用Collection接口实现定义一个集合以及其相关操作,相比于数组,集合能够改变其长度也有更多相应的方法便于我们使用
关于Collection接口
相关操作
add(Object o):增加元素
addAll(Collection c):把集合C的元素添加进去
clear():清空一个集合
contains(Object o):是否包含指定元素
containsAll(Collection c):是否包含集合c中的所有元素
iterator():返回Iterator对象,用于遍历集合中的元素
remove(Object o):移除元素
removeAll(Collection c):相当于减集合c
retainAll(Collection c):相当于求与c的交集
size():返回元素个数
toArray():把集合转换为一个数组
Set子接口
Set集合不允许包含相同的元素,而判断两个对象是否相同则是根据equals方法。
Collection text = new ArrayList();
//添加单个元素
text.add("Jack");
text.add("Merry");
System.out.println(text);
//删除一个对象
text.remove("Jack");
System.out.println(text);
//获取元素个数
System.out.println(text.size());
//判断是否包含一个元素
if(text.contains("Merry")){
System.out.println("有");
}else{
System.out.println("无");
}
//判断是否为空
if(text.isEmpty()){
System.out.println("kon");
}
//判断两个集合是否相同
Collection t2 = new ArrayList<>();
t2.add("Jack");
t2.add("Merry");
if(text.equals(t2)){
System.out.println("相同");
}else{
System.out.println("不同");
}
//清空
text.clear();;
System.out.println(text);
Collection的遍历可以用Iterator接口或者foreach循环来实现
List list=new ArrayList()
for (int i = 0; i < TOTAL_COUNT; i++) {
String key = "user" + i;
list.add(key);
}
// 以前常用遍历的方法
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(str);
}
// 迭代遍历
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
}
// 迭代遍历的for方式;相对while循环而言,能够避免变量名错误
for (Iterator iter = list.iterator(); iter.hasNext();) {
String str = iter.next().toString();
System.out.println(str);
}
// foreach遍历:JDK1.5之后的方法
for (String str : list) {
// 直接用了
System.out.println(str);
}
List子接口是有序集合,所以与Set相比,增加了与索引位置相关的操作:
add(int index, Object o):在指定位置插入元素
addAll(int index, Collection c):...在自定位置插入整个集合C
get(int index):取得指定位置元素
indexOf(Obejct o):返回对象o在集合中第一次出现的位置
lastIndexOf(Object o):...
remove(int index):删除并返回指定位置的元素
set(int index, Object o):替换指定位置元素
subList(int fromIndex, int endIndex):返回子集合
ArrayList score = new ArrayList<>();
score.add(2);
score.add(3);//在末尾添加
score.add(0,1);//在指定位置插入
System.out.println(score);
//访问指定元素
score.get(1);
//修改一个元素
score.set(0,0);
System.out.println(score);
//删除
score.remove(0);//删除指定位置的元素
System.out.println(score);
score.remove((Integer) 2); //删除指定的对象
System.out.println(score);
score.clear();//删除所有 清空
System.out.println(score);
ArrayList a2 = new ArrayList<>();
a2.add(1);
a2.add(2);
a2.add(3);
//将另外一个集合里面的内容添加到当前集合中
score.addAll(a2);
System.out.println(score);
ArrayList a3 = new ArrayList<>();
a3.add(1);
a3.add(2);
score.retainAll(a3);//取两个集合的交集
System.out.println(score);
//访问某个对象在集合里面的索引
ArrayList a4 = new ArrayList<>();
a4.add(1);
a4.add(2);
a4.add(2);
a4.add(1);
System.out.println(a4.indexOf(1));
System.out.println(a4.lastIndexOf(1));
//将ArrayList 转化为普通数组
Integer[] objects = new Integer[a4.size()];
a4.toArray(objects);
a4.toArray(objects);
for(Integer i:objects){
System.out.println(i);
}
Object[] objects1 = a4.toArray();
for(Object i: objects1){
System.out.println(1);
}
Iterator ite = a4.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
//获取集合某个范围的子集合
List integers = a4.subList(1,2);
System.out.println(integers)
关于Collection接口和其他的按觉得下面这个链接的作者写的很好,嘿嘿嘿,孔乙己曾说窃书不为贼。https://my.oschina.net/wugong/blog/1607614
总结
俺觉得最近学的东西挺少的,就是要记忆的有点多,应该花点功夫。