2019-08-16文件的读写,数组与集合

目标

昨天由于实在是不想写简述就没有写,于是今天我痛定思痛想把昨天的内容也补上去。昨天的昨天我们主要学习了文件如何写入和写出数据,今天我们学习了关于数组和集合的一些操作。

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接口

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

总结

俺觉得最近学的东西挺少的,就是要记忆的有点多,应该花点功夫。

你可能感兴趣的:(2019-08-16文件的读写,数组与集合)