JAVA-17.2-集合、IO流之综合演练

来源:互联网 发布:淘宝大金空调贴牌造假 编辑:程序博客网 时间:2024/06/05 11:45

题目一: 将两个集合{“a”,“b”,“c”,“d”,“e”}和{“d”,“e”,“f”,“g”,“h”},把这两个集合去除重复项合并成一个,实现需求

package com.edu_01;import java.util.Iterator;import java.util.TreeSet;/** * 题目一: 将两个集合{“a”,“b”,“c”,“d”,“e”}和{“d”,“e”,“f”,“g”,“h”}, * 把这两个集合去除重复项合并成一个,实现需求 */public class Demo1 {    public static void main(String[] args) {        /**分析:         * 1.集合中存储的是String类型         * 2.元素有序,(有序Hashset,无序TreeSet),且String类中已经实现了 Comparable接口         * 3.给集合添加元素,add()         * 4.将两个集合合并,最简单的方法,使用addAll()         */        TreeSet<String> ts = new TreeSet<String>();        ts.add("a");        ts.add("b");        ts.add("c");        ts.add("d");        ts.add("e");        TreeSet<String> ts2 = new TreeSet<String>();         ts2.add("d");        ts2.add("e");        ts2.add("f");        ts2.add("g");        ts2.add("h");        ts.addAll(ts2);//合并集合,并删除相同元素,保证元素唯一有序        //遍历        //方式一:增强for循环        for (String s : ts) {            System.out.print(s+"  ");        }        System.out.println();        System.out.println("------------------------");        //方式二:迭代器        Iterator<String> it = ts.iterator();        while(it.hasNext()){            System.out.print(it.next()+"  ");        }    }}/*a  b  c  d  e  f  g  h  ------------------------a  b  c  d  e  f  g  h  */

题目二:已知文件a.txt文件中的内容为“AAbcdea22dferwplkCC321ou1”,请编写程序读取该文件内容,要求去掉重复字母(区分大小写字母)并按照自然排序顺序后输出到b.txt文件中。即b.txt文件内容应为”123ACabcdefklopruw”这样的顺序输出

package com.edu_02;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.TreeSet;/** * 题目二:已知文件a.txt文件中的内容为“AAbcdea22dferwplkCC321ou1”, * 请编写程序读取该文件内容,要求去掉重复字母(区分大小写字母)并按照自然排序顺序后输出到b.txt文件中。 * 即b.txt文件内容应为"123ACabcdefklopruw"这样的顺序输出 */public class Demo2 {    public static void main(String[] args) throws IOException {        /**         * 分析:         * 1.IO流读取、录入文件,         * 2.一次读取一个字节         * 3.将读取到的内容添加到TreeSet集合(Integer类已经实现Comparable接口,进行了自然排序)         * 4.遍历集合,将元素录入文件         */        FileInputStream fis = new FileInputStream("a.txt");        TreeSet<Integer> ts = new TreeSet<Integer>();//字节输入流,一次读取一个字节上时,返回的是ASCII码                                                     //所以集合用Integer类型接收        int by;        while ((by = fis.read())!=-1) {            ts.add(by);        }        //创建字节输出流,并写入文件        FileOutputStream fos = new FileOutputStream("b.txt");        for (Integer i : ts) {            fos.write(i);        }        //关流        fis.close();        fos.close();    }}

题目三:在c盘下有篇txt文本,读取这个文本并统计出这个文本中指定字符的个数(如指定字符为”我”),将该字符与对应的次数输出到当前项目的key.txt中,例如:输出格式为:我=10

package com.edu_03;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Properties;/** * 题目三:在项目下存在c.txt文本,读取这个文本并统计出这个文本中指定字符的个数(如指定字符为”我”), * 将该字符与对应的次数输出到当前项目的key.txt中,例如:输出格式为:我=10 * 比如c.txt写的是“wo我我我我我我你、09nsd5A;ASD /;as,,[WDWO 我” */public class Demo3 {    public static void main(String[] args) throws IOException {        /**         * 分析:         * 1.IO流读取、录入文件         * 2.使用字符流一次读取一个字符         * 3.定义统计变量,将读取到的字符与给定字符比较,相同则变量自增1         * 4.使用Properties存储         */        FileReader fr = new FileReader("c.txt");/*       * 方式一:        Properties prop = new Properties();        prop.load(new FileInputStream("key.txt"));        prop.setProperty("我", "counts");        int count = 0;        int by;        while ((by = fr.read())!=-1) {            if (((char)by+"").equals("我")) {                count++;                prop.setProperty("我", count+"");            }        }        prop.store(new FileOutputStream("key.txt"), "key=value");        //关流        fr.close();        //最后运行结果发现key.txt中存储的是“\u6211=7”,原因在于使用Properties时文件中应该尽可能存储英文         *         *///方式二 :        //使用字符流存储        FileWriter fw = new FileWriter("key.txt");        int count = 0;        int by;        while ((by = fr.read())!=-1) {            if (((char)by+"").equals("我")) {                count++;            }        }        fw.write("我="+count);        //关流        fr.close();        fw.close();        //最后key.txt中存储的是“我=7”    }}

题目四:已知User类,该类有name(String类型)和age(int类型)两个属性,TreeSet<User>排序,要求按照User对象的age的倒序排序。

package com.edu_04;public class User {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public User(String name, int age) {        super();        this.name = name;        this.age = age;    }    public User() {        super();        // TODO Auto-generated constructor stub    }}
package com.edu_04;import java.util.Comparator;import java.util.TreeSet;/** * 题目四:已知User类,该类有name(String类型)和age(int类型)两个属性, * TreeSet<User>排序,要求按照User对象的age的倒序排序。 */public class Demo4 {    public static void main(String[] args) {        //创建TreeSet集合并利用匿名内部类进行比较器排序        TreeSet<User> ts = new TreeSet<User> (new Comparator<User>() {            @Override            public int compare(User u1, User u2) {                int n = u2.getAge() - u1.getAge();                int m = n==0?u1.getName().compareTo(u2.getName()):n;                return m;            }        });        //创建User对象        User u1 = new User("张三",12);        User u2 = new User("李四",20);        User u3 = new User("王五",6);        User u4 = new User("赵六",35);        //给集合添加元素        ts.add(u1);        ts.add(u2);        ts.add(u3);        ts.add(u4);        //遍历        for (User u : ts) {            System.out.println(u.getName()+"  "+u.getAge());        }    }}

题目五:在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 添加完成后以两种遍历方式遍历输出.

package com.edu_05;public class Person {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }    public Person() {        super();        // TODO Auto-generated constructor stub    }    //重写hashCode(),equals()方法    //把姓名相同的人当作同一个人,禁止重复添加。    //所以重写时,只用重写name即可    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((name == null) ? 0 : name.hashCode());        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Person other = (Person) obj;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }}
package com.edu_05;import java.util.HashSet;import java.util.Iterator;/** * 题目五:在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 * 添加完成后以两种遍历方式遍历输出. */public class Demo5 {    public static void main(String[] args) {        /**         * 分析:         * 1.重写hashCode(),equals()方法把姓名相同的人当作同一个人,禁止重复添加。所以重写时,只用重写name即可         *          */        HashSet<Person> hashSet = new HashSet<Person>();        Person p1 = new Person("张三",45);        Person p2 = new Person("李四",68);        Person p3 = new Person("张三",23);        Person p4 = new Person("王五",45);        Person p5 = new Person("赵六",20);        hashSet.add(p1);        hashSet.add(p2);        hashSet.add(p3);        hashSet.add(p4);        hashSet.add(p5);        //方式一,增强for        for (Person p : hashSet) {            System.out.println(p.getName()+"  "+p.getAge());        }        System.out.println("------------------");        //方式二:迭代器        Iterator<Person> it = hashSet.iterator();        while (it.hasNext()) {            Person p = it.next();            System.out.println(p.getName()+"  "+p.getAge());        }    }}

题目六:选择合适的Map集合保存5位学员的学号和姓名,然后按学号的自然顺序的倒序将这些键值对一一打印出来(要求使用两种遍历方式)。

package com.edu_06;public class Student {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Student(String name, int age) {        super();        this.name = name;        this.age = age;    }    public Student() {        super();        // TODO Auto-generated constructor stub    }    @Override    public String toString() {        return "Student [name=" + name + ", age=" + age + "]";    }}
package com.edu_06;import java.util.Map.Entry;import java.util.Comparator;import java.util.Set;import java.util.TreeMap;/** * 题目六:选择合适的Map集合保存5位学员的学号和姓名, * 然后按学号的自然顺序的倒序将这些键值对一一打印出来(要求使用两种遍历方式)。 */public class Demo6 {    public static void main(String[] args) {        /**         * 分析:         * 1.要求有序,所以用TreeMap集合         * 2.TreeMap<Integer,Student>         * 3.学号Integer类型,进行自然顺序的倒序         * 4.遍历         */        TreeMap<Integer, Student> tm = new TreeMap<Integer,Student>(new Comparator<Integer>() {            @Override            public int compare(Integer i1, Integer i2) {                int n = i2-i1;                return n;            }        });        Student p1 = new Student("张三",54);        Student p2 = new Student("李四",46);        Student p3 = new Student("王五",32);        Student p4 = new Student("赵六",75);        tm.put(10, p1);        tm.put(3, p2);        tm.put(15, p3);        tm.put(6, p4);        //方式一        Set<Entry<Integer, Student>> entrySet = tm.entrySet();        for (Entry<Integer, Student> entry : entrySet) {            System.out.println(entry.getKey()+"  "+entry.getValue());        }        System.out.println("---------------------");        //方式二        Set<Integer> keySet = tm.keySet();        for (Integer key : keySet) {            System.out.println(key+"  "+tm.get(key));        }    }}

题目七:用List方法,存储10个1-50(含50)的随机偶数元素,要求数字不能重复,添加完成后从大到小倒序遍历输出到控制台并使用IO流将集合中的元素按指定格式输出到当前项目的num.txt中,例如: 48,44,40,38,34,30,26……

package com.edu_07;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;/** * 题目七:用List方法,存储10个1-50(含50)的随机偶数元素,要求数字不能重复, * 添加完成后从大到小倒序遍历输出到控制台并使用IO流将集合中的元素按指定格式输出到当前项目的num.txt中, * 例如: 48,44,40,38,34,30,26...... */public class Demo7 {    public static void main(String[] args) throws IOException {        /**         * 1.查询快,我们使用ArrayList<Integer>         * 2.循环产生随机数         * 3.遍历集合,如果集合长度小于10,且该随机数不在集合中,则添加至集合,否则不添加         * 4.集合工具类进行自然排序         * 5.集合工具类进行反转,实现从大到小         * 6.遍历集合打印在控制台         * 7.IO流,按指定格式输出到当前项目的num.txt         */        ArrayList<Integer> al = new ArrayList<Integer>();//创建集合        while (true) {            if (al.size()<10) {                int r = (int) (Math.random()*50+1);//产生随机数                boolean flag = true;                for (Integer i : al) {                    if (i==r) {                        flag = false;                        break;//如果集合中已经有该随机数了,就改变标识,直接跳出for循环                    }                }                if (flag) {                    al.add(r);//如果集合中没有该随机数,就添加                }            }else {                break;//如果集合长度大于10,就跳出循环            }        }        Collections.sort(al);//自然排序(从小到大)        Collections.reverse(al);//反转        //遍历,同时将数据写入文件        FileWriter fw = new FileWriter("num.txt");//创建字节输出流        for (Integer i : al) {            System.out.print(i+",");//打印在控制台,自动拆装箱            fw.write(i+",");            fw.flush();        }    }}
原创粉丝点击