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(); } }}
阅读全文
0 0
- JAVA-17.2-集合、IO流之综合演练
- 【java编程】IO流和集合类综合题目
- Java——集合IO综合应用
- java集合、IO流
- 黑马程序员—集合与IO流综合练习
- Java--递归、字节流和集合综合
- java基础的综合应用(类的应用,文本拷贝,IO流,数组,集合,文件文件夹的创建)
- Java集合类综合
- Java IO流,Properties集合
- java基础IO流集合
- IO流综合练习
- 黑马程序员——JAVA基础--- 集合IO综合练习排序问题
- Java集合框架-综合概述
- 黑马程序员-----Java基础IO流综合实例
- JAVA之IO流
- JAVA之IO流(
- Java之IO流
- java之IO流
- Orcale笔记: Merge into 语法总结
- 人脸识别特征脸提取PCA算法
- 1019. 数字黑洞 (20)
- 今天用到的各种控件的属性设置,以及在Activity中的获取方法和设置
- Linux进程管理与调度
- JAVA-17.2-集合、IO流之综合演练
- 【小知识】微软(Microsoft)的win7 SP1补丁,细分版本CHK和FRE的区别
- Scoket网络编程客户端
- mybatis 分页
- Python网络编程(Socket Tcp Udp)
- android去掉手机号码中的空格和-
- Java多线程基础
- PHP实现二分查找
- git初次使用命令行总结