基本数据类型转换 byte类型相加转换 byte a = 3; byte b = 4; byte c = (byte)(a + b);
int类型加double转换 Int a=3; Double b=4; Double= a+b;String类型转换
String转int: String str=”10”; Integer.parseInt(str).var
String转Double: String str=”10”; Double.parseDouble(str).var
String转char: String str=“是”; Str.charAt(0).var w.setSex(SC.nextLine().charAt(0));//键盘录入直接转char类型! String money = SC.nextLine(); double b = Double.parseDouble(money); w.setMoney(b); //键盘录入转double类型!
String转char[]数组: String str=“1,2,3,4,5”; str.toCharArray().var
String转Long: String str=”20200000900000”; Long.parseLong(str).var Byte.parsebyte(str).var Short.parseshort(str).var
Arrays类 数组的排序和遍历打印
int[] arr = {1,332,43,25,3324,34,335,4,45,2,43,52,54}; // 把数组转换成一个字符串打印 Arrays.toString(arr); // 对数组进行升序排序 Arrays.sort(arr);
集合的迭代器遍历 for循环 增强for循环
ArrayListlist=new ArrayList<>(); List.add(40,50,70,90,100);
迭代器遍历:
Sting类型 ArrayList s1 = new ArrayList<>(); Iteratorit= s1.iterator(); while (it.hasNext()){ String s= it.next(); System.out.println(“s = “ + s); }
Integer类型 Iterator iter = list.iterator(); while (iter.hasNext()){ Integer next = iter.next(); System.out.println(“next = “ + next); }
for循环: Integer []arr={40,50,70,90,100}; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
增强for循环: (int Integer自己定义一个变量 :冒号后面写定义的数组或者集合名) for (int a : arr) { System.out.println(“a = “ + a); }
HashSet集合遍历后直接会删除重复项
HashSeths=new HashSet<>(); hs.add(“刘备”); hs.add(“关羽”); hs.add(“张飞”); hs.add(“刘备”); System.out.println(hs.size());//自动删除重复值
正则表达式方法
BigInteger 的API 精准度低
BigInteger b1 = new BigInteger (“0.01”); BigInteger b2 = new BigInteger (“0.09”);
1.b1.add(b2).var 加法! 2.b1.subtract(b2).var 减法! 3.b1.multiply(b2).var 乘法! 4.b2.divide(b1).var 除法,除不尽取整数部分!**
ROUND_HALF_UP (四舍五入) ROUND_FLOOR (去尾法) ROUND_UP (进一法)
BigDecimal 的API 精准度更高
BigDecimal b1 = new BigDecimal(“0.01”); BigDecimal b2 = new BigDecimal(“0.09”);**
1.b1.add(b2).var 加法! 2.b1.subtract(b2).var 减法! 3.b1.multiply(b2).var 乘法! 4.b2.divide(b1).var 除法,除不尽会报异常! 5.b1.divide( b2, 3, BigDecimal.ROUND_UP).var 避免除不尽的方式! (被除对象,留几位数,四舍五入还是去尾或者进一法!)**
基本类型转字符串!
1. 直接在数值后面加一个空字符串! String B=10+” “; 2. 通过String类静态方法valueOf( )! int a=100; String.valueOf(a).var**
字符串常用方法 String类型常用方法! 字符串拼接 public String concat (String str)将当前字符串与参数字符串进行“拼接”返回一个新字符串。等效于加号拼接 字符串判断 public boolean contains (CharSequence s)判断参数字符串在当前字符串中是否存在(区分大小写),存在返true。 public boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结尾(区分大小写)。 public boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始(区分大小写) public int indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。如果不包含,则返回-1. public int lastIndexOf(String str)返回指定子字符串最后一次出现的字符串中的索引。 如果不包含,则返回-1. 替换截取 public String replace(CharSequence target,CharSequence replacement) 将与字面目标序列匹配的字符串的每个子字符串替换为指定的文字替换序列。 public String substring(int beginIndex) 将当前字符串从beginIndex开始截取到末尾。 public String substring(int beginIndex, int endIndex)将当前字符串从beginIndex开始截取到endIndex - 1处。(包头,不包尾) 字符串转换 public char[] toCharArray() 将当前字符串转换为char[]数组。 public char charAt(int index) 将字符串中指定索引的字符获取 public String toLowerCase() 将当前字符串中的所有英文字符转换为小写,并返回一个转换后的新字符串,原字符串不变。 public String toUpperCase() 将当前字符串中的所有英文字符转换为大写,并返回一个转换后的新字符串,原字符串不变。 前后空格去除 public String trim() 去掉当前字符串的前后空格(空字符,制表符,换行符等),并返回一个新字符串,原字符串不变。 字符串的切割 public String[] split(String regex) 切割字符串——将字符串以regex作为分隔符进行切割。
String类型判断寻找方法使用!
String str = “I Love Java, I Love Heima”; //判断是否存在 “Java” 返回Boolean类型System.out.println(str.contains(“Java”));//true //判断是否以Heima字符串结尾 返回Boolean类型System.out.println(str.endsWith(“Heima”));//true //判断是否以Java开头 返回Boolean类型System.out.println(str.startsWith(“Java”));//false //判断 Java在字符串中的第一次出现位置System.out.println(str.indexOf(“Java”));//7 //判断 itcast 所在的位置System.out.println(str.indexOf(“itcast”));//-1 //最后一次出现的位置索引!System.out.println(str.lastIndexOf(“Love”));//15 ——————————————————————————————————————————— String str = “I Love Java, I Love Heima”; //1.将所有 Love 替换为 Like ,打印替换后的新字符串 String replace = str.replace(“Love”, “Like”);//替换想换取的元素System.out.println(“replace = “ + replace);//I Like Java, I Like Heima //2.截取字符串 “I Love Heima”String sub1 = str.substring(13);//截取到末尾 System.out.println(“sub1 = “ + sub1);//I Love Heima //3.截取字符串 “Java” String sub2 = str.substring(7, 11);//截取部分提供索引!System.out.println(“sub2 = “ + sub2);//Java ————————————————————————————————————————————— String str = “I Love Java, I Love Heima”; //1 计算字符 a 出现的次数(要求使用toCharArray)char[] chars = str.toCharArray(); int count = 0;for (int i = 0; i < chars.length; i++) { if (chars[i]==’a’) { count++;}} System.out.println(“count = “ + count);//3 ** //2 计算字符 a 出现的次数(要求使用charAt)count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i)==’a’) { count++; } }System.out.println(“count = “ + count);//3 String str1 = “ A B C “; String str2 = str1.trim();//去除前后空格 String str1 = “abc,123,def”;String[] arr1 = str1.split(“,”);//按照逗号切割 System.out.println(Arrays.toString(arr1)); 结果: [abc, 123, def] . + ? 一些正则表达式的特殊字符作为切割字符串,需要将这些字符进行转义,在前面加上\**
时间API使用 Date date=new Date(); SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);String strDate = sdf.format(date); //strDate为yyyy-MM-dd HH:mm:ss格式的正时间。
//当前时间 LocalDateTime now = LocalDateTime.now();System.out.println(“now = “ + now); //指定时间LocalDateTime ldt = LocalDateTime.of(2021,12,2,17,17,17); System.out.println(“ldt = “ + ldt);**
LocalDateTime获取功能 public int getYear() 获取年 public int getMonthValue() 获取月份(1-12) public int getDayOfMonth() 获取月份中的第几天(1-31) public int getDayOfYear() 获取一年中的第几天(1-366) public DayOfWeek getDayOfWeek() 获取星期 public int getHour() 获取小时 public int getMinute() 获取分钟 /public class LocalDateTimeDemo2 { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); //年,月,日 int year = now.getYear(); int monthValue = now.getMonthValue(); int dayOfMonth = now.getDayOfMonth(); System.out.println(year+”-“+monthValue+”-“+dayOfMonth); //时,分,秒 int hour = now.getHour(); int minute = now.getMinute(); int second = now.getSecond(); System.out.println(hour+”:”+minute+”:”+second);** //星期 DayOfWeek dayOfWeek = now.getDayOfWeek(); System.out.println(“dayOfWeek = “ + dayOfWeek);//THURSDAY 星期四 int value = dayOfWeek.getValue(); System.out.println(“week = “ + value);//4** } 时间的增加或减少 public LocalDateTime plusYears (long years) 添加或者减去年 public LocalDateTime plusMonths(long months) 添加或者减去月 public LocalDateTime plusDays(long days) 添加或者减去日 public LocalDateTime plusHours(long hours) 添加或者减去时 public LocalDateTime plusMinutes(long minutes) 添加或者减去分 public LocalDateTime plusSeconds(long seconds) 添加或者减去秒 public LocalDateTime plusWeeks(long weeks) 添加或者减去周** 时间的修改 public LocalDateTime withYear(int year) 直接修改年 public LocalDateTime withMonth(int month) 直接修改月 public LocalDateTime withDayOfMonth(int dayofmonth) 直接修改日期(一个月中的第几天) public LocalDateTime withDayOfYear(int dayOfYear) 直接修改日期(一年中的第几天) public LocalDateTime withHour(int hour) 直接修改小时 public LocalDateTime withMinute(int minute) 直接修改分钟 public LocalDateTime withSecond(int second) 直接修改秒 /public class LocalDateTimeDemo3 { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); 加或者减 年月日时分秒周! LocalDateTime localDateTime = now.plusYears(100);//正数加上,负数减去 System.out.println(“localDateTime = “ + localDateTime);//2122-03-05T22:16:44.676487 直接修改 年月日时分秒! LocalDateTime localDateTime1 = now.withYear(1998);//直接修改 System.out.println(“localDateTime1 = “ + localDateTime1);1998-03-05T22:16:44.676487 } }**
ArrayList集合常用方法 ArrayList集合:底层就是数组(查询快,增删慢,并且有索引!) 方法名 说明 public boolean remove(Object o) 删除指定的元素,返回删除是否成功 public E remove(int index) 删除指定索引处的元素,返回被删除的元素 public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素 public E get(int index) 返回指定索引处的元素 public int size() 返回集合中的元素的个数
ArrayListlist=new ArrayList<>(); list.add(“唐僧”);list.add(“八戒”); list.add(“悟空”);list.add(“沙僧”); list.add(“白龙马”);System.out.println(“list = “ + list);//list = [唐僧, 八戒, 悟空, 沙僧, 白龙马] int size = list.size(); //返回集合中的元素的个数System.out.println(“size = “ + size); //5 String s = list.get(2) // 返回指定索引处的元素 System.out.println(“s = “ + s); //悟空 String S= list.set(2, “美猴王”);//修改指定索引处的元素,前面写索引后面写新元素 System.out.println(list); //[唐僧, 八戒, 美猴王, 沙僧, 白龙马]boolean S1 = list.remove(“沙僧”);//删除指定元素 但是不准确会删除所有元素 System.out.println(list);//[唐僧, 美猴王, 悟空, 沙僧, 白龙马] Collections.addAll(list, 唐僧, 八戒, 美猴王, 沙僧, 白龙马);//此方法可直接添加所有数据!**
String类型删除使用forr自减遍历 注意:如果是自增遍历可能会导致删除不干净,而使用自减遍历可以避免这种弊端! for (int i = list.size() - 1; i >= 0; i—) { //对集合进行遍历! String s1= list.get(i); //将遍历的值临时赋给s1 if(s1.equals(“白龙马”)){ //使用equlas进行比较,并删除! list.remove(“白龙马”); }
注意:如果数据是Integer 删除remove()括号是默认是位置索引。 如果想让直接删除元素直接定义一个同类型的变量,放在remove()括号中! ArrayListlist=new ArrayList<>(); list.add(1);list.add(2); list.add(3);list.add(4); list.remove(3); //默认为元素索引位置 而不是元素值!System.out.println(“list = “ + list); //list = [1, 2, 3] 删除Integer中的所指定元素! Integer e=3; //比如:定义变量赋值3 list.remove(e); //remove()写变量,那么直接就会集合中的元素。System.out.println(list); //[1, 2]
集合字符串的遍历
所有引用数据类型在集合中都可使用fori,forr进行遍历!
数组名.fori 自增遍历!
for (int i = 0; i <list.size() ; i++) { String s = list.get(i); System.out.println(“s = “ + s); // s = 唐僧 s = 沙僧 s = 八戒 s = 悟空 s = 沙僧 s = 白龙马 **} 数组名.forr 自减遍历! **for (int i = list.size() - 1; i >= 0; i—) { String s = list.get(i); System.out.println(“s = “ + s); } // s = 白龙马 s = 沙僧 s = 悟空 s = 八戒 s = 沙僧 s = 唐僧
使用for循环对学生对象进行遍历输出!
ArrayListstudents=new ArrayList<>(); students.add(new Student(“李四”,20,”男”)); students.add(new Student(“王二”,20,”女”)); for (int i = 0; i < students.size(); i++) { Student S1=students.get(i); System.out.println(S1.getName()+”,”+S1.getAge()+”,”+S1.getSex()); // 李四,20,男 王二,20,女 }**
Collection-常用方法 (科莱科森) Collecton是集合的顶层根接口,下面有俩个子类 一个List一个Set。
public boolean add(E e): 把给定的对象添加到当前集合中 。 public void clear() :清空集合中所有的元素。public boolean remove(E e): 把给定的对象在当前集合中删除。 public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。public boolean isEmpty(): 判断当前集合是否为空。 public int size(): 返回集合中元素的个数。public Object[] toArray(): 把集合中的元素,存储到数组中
示例: < >中必须放置的是引用数据类型! 也可以使用List这个父类型:Listlist=new ArrayList<>(); 实例化集合:父类型变量collection实现子类型ArrayList对象! Collection collection = new ArrayList<>(); collection.add(“詹姆斯”);collection.add(“麦迪”); collection.add(“科比”);collection.add(“奥尼尔”); System.out.println(“collection = “ + collection); //直接打印集合 // collection = [詹姆斯, 麦迪, 科比, 奥尼尔]collection.remove(“科比”); //删除集合中的某个元素 System.out.println(“collection = “ + collection);//collection = [詹姆斯, 麦迪, 奥尼尔]Object[] objects = collection.toArray();//将集合转为数组类型! for (Object obj : objects) { System.out.println(“obj = “ + obj);// obj =詹姆斯 ,obj = 麦迪 ,obj = 奥尼尔 }collection.clear(); //删除集合中所有元素! System.out.println(“collection = “ + collection);//collection = [ ]**
Itearator 迭代器 (依体而瑞特二) 注意:1.迭代器只能使用一次 ,迭代动作已经结束,不能继续next获取元素。 2.迭代器使用过程中不可以用集合对象直接增删元素,删除用迭代器的方法。
通用定义格式: Iterator iter = 集合对象.iterator(); while(iter.hasNext()){ //有元素 元素 = iter.next(); //操作元素 } 实例: Collectioncollection=new ArrayList<>(); collection.add(“詹姆斯”); collection.add(“麦迪”); collection.add(“科比”); collection.add(“奥尼尔”); //变量名.迭代器名称.var //collection.iterator().var Iterator iter = collection.iterator();//变量名.iterator.var while (iter.hasNext()){ // 迭代器定义的变量名.hasNext() String next = iter.next(); // 迭代器变量名.next().var System.out.println(“next = “ + next); if(“科比”.equals(next)){ //迭代器while循环中删除元素! iterator.remove(); } } System.out.println(“collection = “ + collection); collection = [詹姆斯, 麦迪 , 奥尼尔]//删除元素后结果! } } 增强for循环 增强for循环底层还是通过迭代器实现的! 快捷键:集合名/数组名.for Collectioncollection=new ArrayList<>(); collection.add(“奔驰”);collection.add(“宝马”); collection.add(“奥迪”);collection.add(“保时捷”); for(String S:collection){ //(变量类型 变量名 :集合名/数组名) String s = S; System.out.println(“s = “ + s);}
List集合的常用方法! 常用子类:1. ArrayList集合:底层就是数组(查询快,增删慢,并且有索引!) 2. Vector集合:底层结构也是数组(线程安全,同步安全的,低效率,用的少!) 3. LinkedList集合:底层结构是双向链表(可以双向查询,效率比单向链表高)
List继承了Collection中所有方法,元素具备索引特性,因此新增了一些含有索引的特有方法,如下: - public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。 - public E get(int index):返回集合中指定位置的元素。 - public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。 - public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。 实例: Listlist=new ArrayList<>(); list.add(“貔貅”); list.add(“囚牛”); list.add(“狻猊”); list.add(“赑屃”); list.add(“麒麟”); list.add(“青龙”); System.out.println(“list = “ + list); // list = [貔貅, 囚牛, 狻猊, 赑屃, 麒麟, 青龙] list.add(1,”爱财”); //(索引,“元素”)添加元素到指定索引位置! System.out.println(“list = “ + list); //list = [貔貅, 爱财, 囚牛, 狻猊, 赑屃, 麒麟, 青龙] list.remove(5); //(索引)删除指定索引元素 System.out.println(“list = “ + list); //list = [貔貅, 爱财, 囚牛, 狻猊, 赑屃, 青龙] list.set(2,”狻猊换朱雀”); //(索引,“替换的新元素”)替换索引位置的元素! System.out.println(“list = “ + list); //list = [貔貅, 爱财, 狻猊换朱雀, 狻猊, 赑屃, 青龙] LinkedList集合 (林克音德利斯特) 内部构造:[^][数据][后一个地址] === [前一个地址][数据][后一个地址]···**
LinkedList特有方法: 只可以在定义LinkedList集合时才可使用! public void addFirst(E e):将指定元素插入此列表的开头。 public void addLast(E e):将指定元素添加到此列表的结尾。public E getFirst():返回此列表的第一个元素。 public E getLast():返回此列表的最后一个元素。public E removeFirst():移除并返回此列表的第一个元素。 public E removeLast():移除并返回此列表的最后一个元素。**
实例: LinkedList list = new LinkedList<>();//注意集合必须是LinkedList! list.addFirst(“A”);list.addFirst(“B”); list.addFirst(“C”);list.addFirst(“D”); list.addFirst(“E”); //因为使用addFirst添加数据,最后添加的会在输出的最前面(弹夹效应)System.out.println(“list = “ + list); //list = [E, D, C, B, A] String s = list.removeFirst(); //删除列表中的第一个元素,此时最后一个进去的成为了第一个!System.out.println(“list = “ + list);//list = [D, C, B, A] list.addFirst(“输出页面第一个”);// 再添加数据 虽然是最后添加的 但是输出是第一个!System.out.println(“list = “ + list);//list = [输出页面第一个, D, C, B, A] LinkedList也用于List中的方法,比如add添加数据等等。LinkedList list1 = new LinkedList<>(); list1.add(“A”);list1.add(“B”); list1.add(“C”); //此时输出为A,B,C是因为add执行输出是队列效应先赋值的先打印System.out.println(“list1 = “ + list1);//list1 = [A, B, C]
Set集合 全部都没有索引 Set集合也是Collection集合的子类型,没有特有方法,Set的定义要求比Collection更严谨
HashSet集合 HashSet:底层结构哈希表结构。 具有特点 : 去重,无索引,无序特点。 哈希表结构的集合,操作效率会非常高。 学生类:如果写了equlas()and hashCode()方法,对象中输出时也会自动去重! 示例: HashSet set = new HashSet<>(); set.add(10);set.add(10); set.add(30);set.add(40); set.add(10);set.add(50); //保证元素唯一,不会有重复的出现! System.out.println(“set = “ + set); //输出结构是无序的!set = [50, 40, 10, 30]但其内部有排序**
HashSetset=new HashSet<>(); set.add(“唐山”); set.add(“石家庄”);set.add(“唐山”); set.add(“石家庄”);set.add(“北京”); System.out.println(“set = “ + set); //字符串类型也是一样的!set = [唐山, 石家庄, 北京] Iterator iterator = set.iterator(); // 变量名.迭代器名(iterator).var while (iterator.hasNext()){ String next = iterator.next(); //HashSet集合 String类型 Iterator方法也可以使用! System.out.println(“next = “ + next);// next = 唐山,next = 石家庄, next = 北京 }**
LinkedHashSet集合 LinkedHashSet底层结构:链表加哈希表结构 有去重效果,有序但不是排序,这里的有序指你所存进来的顺序是什么样就是什么样! 示例: LinkedHashSet list=new LinkedHashSet<>(); list.add(20);list.add(10); list.add(30);list.add(10);//逐级添加并删除重复值,到这里会匹配前面的元素,有10就不会添加这个10进去! System.out.println(“list = “ + list); //输出结果:list = [20, 10, 30]**
数组随机赋值并排序! **public class Demo03 { public static void main(String[] args) { Random sc = new Random(); int[] arr = new int[100]; //定义个数100的动态数值! for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(100) + 1; System.out.print(arr[i] + “ “); //利用for循环给数组中的元素赋值! } for (int i = 0; i < arr.length; i++) { //冒泡排序 for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } System.out.println(); System.out.print(Arrays.toString(arr)); }} Collection接口及子类分析图
Collections.sort(List, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; }}); Lambda表达式: Collectione.sort(list,(o1,o2)->o2-o1)}: ↑ //Collections.sort实现降序
Collection示例 public class CollectionReview { public static void main(String[] args) { test1();
}
private static void test1() { // Collection为接口,使用多态进行创建 Collection collection = new Vector<>(); collection.add(“gogogo”); collection.add(“pap”); collection.add(“niko”); collection.add(“kitty”);
Collection coll = new ArrayList<>(); coll.add(“niko”); coll.add(“kitty”); coll.add(“pecuyu”);
// collection.clear(); // 清空集合 //System.out.println(collection.isEmpty()); // 集合是否为空
// int size = collection.size(); // 获取集合大小 // System.out.println(size);
// boolean contains = collection.contains(“niko”); // 是否包含另一个元素 // System.out.println(contains); //boolean containsAll = collection.containsAll(coll); //是否完全包含另一个集合 //System.out.println(containsAll);
// collection.remove(“kitty”); // 删除第一个匹配项,删除了匹配项则返回true // boolean removeAll = collection.removeAll(coll); // 删除与指定集合有交集的部分,原集合有改变就返回true // System.out.println(removeAll);
//boolean retainAll = collection.retainAll(coll);// 保留与指定集合有交集的部分,原集合有改变就返回true //System.out.println(retainAll);
ArrayList使用示例
// iterator 迭代器, 方式1 Iterator iterator = collection.iterator(); while(iterator.hasNext()){ System.out.print(iterator.next()+” “); } System.out.println(“\n”+”—————————-“);
// 方式2 ,for循环完iterator1就会被销毁,节约内存提高效率 for (Iterator iterator1 = collection.iterator(); iterator1.hasNext(); ) { System.out.print(iterator1.next()+” “);
} System.out.println(“\n”+”—————————-“);
Object[] array = collection.toArray(); // 转化为object数组 for (Object string : array) { System.out.print(string+” “); } System.out.println(“\n”+”—————————-“); String[] arr=new String[collection.size()]; String[] array2 = collection.toArray(arr); // 指定要转化的数组类型 for (String string : array2) { System.out.print(string+” “); } } public class ArrayListReview { public static void main(String[] args) { ArrayList infosList=new ArrayList<>(); infosList.add(new Info(0, “aaa”)); infosList.add(new Info(1, “bbb”)); infosList.add(new Info(2, “ccc”)); infosList.add(new Info(3, “ddd”)); infosList.add(1, new Info(4, “eee”)); // 按索引插入到指定位置 // foreach遍历输出 for (Info info : infosList) { System.out.println(info); } System.out.println(“————————————“); // 截取字串 List subList = infosList.subList(1, 3); subList.add(new Info(30, “fly”)); printList(subList); ArrayList newInfosList=new ArrayList<>(); newInfosList.add(new Info(11, “qqq”)); newInfosList.add(new Info(12, “www”)); ArrayList ss=new ArrayList<>(); // infosList.addAll(newInfosList); // 添加一个指定集合到原集合最后,注意两个集合的泛型参数一致 infosList.addAll(2,newInfosList); // 将指定集合插入到指定位置 //printList(infosList); Info info = infosList.get(2); // 取出指定位置的元素 System.out.println(info); infosList.set(0, new Info(10, “rrr”)); // 替换指定索引位置的元素 //printList(infosList); int index = infosList.indexOf(info); //根据元素获取元素第一次出现的索引,不存在则返回-1 int lastIndex = infosList.lastIndexOf(info); // 取出元素的最后一个匹配项的索引 int indexOf = infosList.indexOf(new Info(4,”eee”)); // 重写了Info类的hashCode与equals方法,用于判断两个对象是否相同 System.out.println(“index=”+indexOf); //printList(infosList); // 通过反射拿到的removeRange方法 removeRange(infosList, 1, 3); //printList(infosList); // listIterator从前往后迭代 ListIterator listIterator = infosList.listIterator(); while(listIterator.hasNext()){ // 最后抛出错误,java.util.NoSuchElementException,不要每次取都掉用next方法,它每调用一次,迭代器指针向前移动一位 // System.out.println(“id=”+listIterator.next().getId() // +”adress=”+listIterator.next().getAdress()); Info next = listIterator.next(); // 正确做法,调用一次要取出元素,然后操作属性 System.out.println(“id=”+next.getId()+” adress=”+next.getAdress()); } // 往前迭代,必须在往后迭代之后用 while(listIterator.hasPrevious()){ // 当有上一个元素时 Info previous = listIterator.previous(); // 获取上一个元素 System.out.println(“id=”+previous.getId()+” adresss=”+previous.getAdress()); } // 通过数组来转化成一个List,虽然可以把数组转成集合,但是集合的长度不能改变。 String[] a=new String[]{“hello”,”world”,”just”,”do”,”it”}; List asList = Arrays.asList(a); //asList.add(“gogogo”); //不可修改asList,会抛出UnsupportedOperationException // 泛型使用 // ArrayList l=new ArrayList();// 不行// ArrayList lll=new ArrayList(); // 不行
// ArrayList lll=new ArrayList(); // 不行
// ArrayList l=new ArrayList(); // 可行 // ArrayList l=new ArrayList<>(); // 可行 // ArrayList ll=new ArrayList(); // 可行 } // 打印输出 public static void printList(List list) { for (E e : list) { System.out.println(e); } System.out.println(“————————————“); } } Java集合总览图
HashMap集合的方法 实例:
HashMaphashMap=new HashMap<>(); hashMap.put(0,”张三”);hashMap.put(1,”李四”); hashMap.put(2,”王五”);System.out.println(hashMap.get(1));//通过键找值并输出 System.out.println(hashMap.get(10));//输出是否有10键的值 输出为nullboolean b = hashMap.containsKey(10);//判断是否有10键 返回为false System.out.println(“b = “ + b);hashMap.remove(1); //删除hashmap集合中1号键与值 System.out.println(“hashMap = “ + hashMap);**
TreeSet示例:
Student类! public class Student implements Comparable { private String name; private int age;
@Override public int compareTo(Student o) { // return this.age-o.age; 升序 return o.age-this.age; 降序} 测试类: public class ComparableDemo2 { public static void main(String[] args) { TreeSetts=new TreeSet<>(); ts.add(new Student(“张三”,20)); ts.add(new Student(“李四”,18)); ts.add(new Student(“赵六”,16)); ts.add(new Student(“和二”,15)); for (Student s1:ts){ System.out.println(“s1 = “ + s1); }}} Shuffle示例: Listlist=new ArrayList<>();list.add(10); list.add(20);list.add(30); list.add(40);System.out.println(“list = “ + list); //list = [10, 20, 30, 40] // 2 添加元素Collections.shuffle(list); //乱序功能打乱last中的集合! 只能打乱list集合! System.out.println(“list = “ + list); // list = [30, 10, 40, 20] Sort示例: ArrayList list = new ArrayList<>();list.add(1); list.add(3);list.add(2); list.add(5);list.add(4); System.out.println(“list = “ + list); //list = [1, 3, 2, 5, 4] Collections.sort(list); //升序 Collectons.sort(变量名);System.out.println(“list = “ + list); //list = [1, 2, 3, 4, 5] Collections.sort(list, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; }}); System.out.println(“list = “ + list); //list = [80, 45, 30, 15, 10]降序方法 }}**
Sort的可变参数示例: public class Test { public static void main(String[] args) { System.out.println(sum(1, 2, 3, 4)); System.out.println(sum(1, 2, 3)); } //可变参数当成数组用,可变参数本质上就是数组可以用索引来访问 public static int sum(int…num){ int sum = 0; for (int i : num) { sum += i; } return sum; } //任意类型都可以定义可变参数! public static void Test(ArrayList…list){ }
Collections的addAll方法 使用:addAll(对象名,。。。。)可以直接传入任意多个实参! public static void main(String[] args) { ArrayList list = new ArrayList<>(); Collections.addAll(list, “a”, “b”, “c”, “d”); System.out.println(list); //list=[a, b, c, d]} public static void addElement(List list, T… t) { for (T element : t) { list.add(element); } }**
冒泡排序
public class SortDemo { public static void main(String[] args) { int[] arr = {5, 4, 3, 2, 1}; for (int j = 0; j < arr.length - 1; j++) { // -1为了防止索引越界 for (int i = 0; i < arr.length - 1 - j; i++) { if (arr[i] > arr[i + 1]) { //升序大于号 降序小于号 int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } System.out.println(Arrays.toString(arr));
选择排序 示例: public class SortDemo { public static void main(String[] args) { int[] arr = {55, 11, 44, 22, 33}; int time = arr.length - 1; // 遍历数组 for (int i = 0; i < time; i++) { //次数 int minIdnex = i; //临时定义最小值的变量 for (int j = i + 1; j < arr.length; j++) { if (arr[minIdnex] > arr[j]) { //剩余未排序的元素中找到最小的索引位置! minIdnex = j; } } if (minIdnex != i) { //将最小的数据与i位置的数据进行交换 int temp = arr[i]; //i位置的元素 minIndex元素比较 arr[i] = arr[minIdnex]; arr[minIdnex] = temp; } } System.out.println(Arrays.toString(arr));//[11, 22, 33, 44, 55] } }
二分查找步骤
public class BinarySearchDemo { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //如果有相同元素只能找到其中一个元素。 System.out.println(binarySearch(arr, 9)); } // 方法的功能是 , 接收一个数组和一个元素 , 返回此元素在数组中出现的索引 public static int binarySearch(int[] arr, int num) { // 1,定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引 int min=0; int max=arr.length-1; // 2,循环查找,但是min <= max while (min<=max){ // 3,计算出mid的值 int mind=(max+min)/2; // 4,判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引 if(arr[mind]==num){ //找到数据返回 return mind; }else if(num//5,如果要查找的值在mid的左半边那么min值不变,max = mid -1.继续下次循环查找 max=mind-1; }else if(num>arr[mind]) { //6,如果要查找的值在mid的右半边那么max值不变,min = mid + 1.继续下次循环查找 min=mind+1; }} // min > max return -1; }}
Map集合常用方法
public class MapDemo1 { public static void main(String[] args) { Map map = new HashMap<>(); //public V put(K key, V value): 把指定的键与指定的值添加到Map集合中 //put返回原来键所对应的值, 返回null String put = map.put(“文章”, “马伊利”); System.out.println(“put = “ + put);//null put返回原来键所对应的值, 返回null put = map.put(“文章”, “姚笛”); System.out.println(“put = “ + put);//put = 马伊利 System.out.println(“map = “ + map); map.put(“谢霆锋”,”张柏芝”); map.put(“陈冠希”,”张柏芝”); map.put(“李亚鹏”,”王菲”); System.out.println(“map = “ + map);** //public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值 String remove = map.remove(“陈冠希”); System.out.println(“remove = “ + remove);//remove = 张柏芝 System.out.println(“map = “ + map); //map = {文章=姚笛, 谢霆锋=张柏芝, 李亚鹏=王菲}** // public V get(Object key) 根据指定的键,在Map集合中获取对应的值 String get = map.get(“文章”);//get = 姚笛 System.out.println(“get = “ + get); System.out.println(“map = “ + map); //map = {文章=姚笛, 谢霆锋=张柏芝, 李亚鹏=王菲} //public boolean containKey(Object key): 判断该集合中是否有此键 boolean containsKry= map.containsKey(“李亚鹏”); System.out.println(“containsKry = “ + containsKry);** }}
Map集合的遍历 方法一: public class MapDemo2 { public static void main(String[] args) { // 1 创建集合对象 Map map = new HashMap<>(); // 2 添加元素 map.put(“周瑜”, “小乔”); map.put(“孙策”, “大乔”); map.put(“刘备”, “孙尚香”); map.put(“诸葛亮”, “黄月英”); // 3 遍历集合 //获取所有 键 Set keys = map.keySet(); for (String key : keys) { String str = map.get(key); System.out.println(key + “,” + str); } } } 方法二: public class MapDemo3 { public static void main(String[] args) { // 1 创建集合对象 Map map = new HashMap<>(); // 2 添加元素 map.put(“射手”, “孙尚香”); map.put(“战士”, “孙策”); map.put(“法师”, “周瑜,诸葛亮”); map.put(“打野”, “刘备”); map.put(“辅助”, “大乔”); //获取所有键值对对象! 生成方法 :Map.entrySet().var Set> entries = map.entrySet(); // 3 遍历集合 生成方法 :entries.for for (Map.Entry entry : entries) { String key = entry.getKey(); //获取键 getKey() : 获取键 String value = entry.getValue(); //获取值 getValue() : 获取值 System.out.println(key+”,”+value); //输出: 刘备,孙尚 香孙策,大乔 诸葛亮,黄月英 周瑜,大乔 //键不能重复,值可以重复 也就是后面的数值可以重复出现!但是前面的不行! }}}**
哈希Map重写后方法!
只要是用哈希表存储数据要达到去重效果都要重写 haxCode和equlas方法!
public class HashMapTest1 { public static void main(String[] args) { // 1 创建HashMap集合对象 MapstudentStringMap=new HashMap<>(); // 2 添加元素 studentStringMap.put(new Student(“迪丽热巴”, 18),”上海”); studentStringMap.put(new Student(“古力娜扎”, 20),”上海”); studentStringMap.put(new Student(“马尔扎哈”, 10),”上海”); studentStringMap.put(new Student(“马尔扎哈”, 10),”上海”); // 3 遍历集合 Set> entries = studentStringMap.entrySet(); for (Map.Entry entry : entries) { Student key = entry.getKey(); String value = entry.getValue(); System.out.println(key+”,”+ value); }}} Student{name=’马尔扎哈’, age=10},上海 Student{name=’古力娜扎’, age=20},上海 Student{name=’迪丽热巴’, age=18},上海 重写方法之后才会具有去重效果!
LinkedHashMap类对象 public class LinkedHashMapTest { public static void main(String[] args) { LinkedHashMapmap=new LinkedHashMap<>(); // 2 添加元素 map.put(“C”,””); map.put(“A”,””); map.put(“B”,””); map.put(“B”,””); map.put(“A”,””); // 3 遍历集合 System.out.println(“map = “ + map);//map = {C=, A=, B=} //特点: 去重 序! 底层采用的数据结构 : 是链表 + 哈希表。}} TreeSet自然排序! package com.itheima.Day06Work; import java.util.Comparator;import java.util.TreeSet; public class TestTeacher { public static void main(String[] args) { TreeSetts=new TreeSet<>(new TeacherComparator()); ts.add(new Teacher(“jack”,19)); ts.add(new Teacher(“luose”,20)); ts.add(new Teacher(“Rose”,17)); ts.add(new Teacher(“james”,22)); for (Teacher t : ts) { System.out.println(“t = “ + t);}}}class TeacherComparator implements Comparator{ @Override public int compare(Teacher o1, Teacher o2) { if(o1.getAge()==o2.getAge()){ return (o1.getName().compareTo(o2.getName())); }else {return o1.getAge()-o2.getAge(); }}}
Tree集合 Integer类型的自然和自定义排序 public class Demo02 { public static void main(String[] args) { TreeSetts1=new TreeSet<>(); Random sc=new Random(); for (int i = 0; i < 10; i++) { int number= sc.nextInt(51); ts1.add(number); } System.out.println(“ts1 = “ + ts1); //上半部分自然排序 也就是升序! TreeSetts2=new TreeSet<>(new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1-o2; } @Override public boolean equals(Object obj) { return false;}}); for (int i = 0; i < 10; i++) { int nimber=sc.nextInt(51)+50; ts2.add(nimber);} System.out.println(“ts2 = “ + ts2);}} //下半部分自定义排序!可升可降! 注意 :自定义排序的变量名和方法名一起定义!
Collection集合 单列集合
Lisy(有索引,有序,可重复)
ArrayList 数组 (查询快,增删慢)
LinkedList 链表 (查询慢,增删快)
Set(无序 无索引 不可重复)
HashSet 哈希表(去重无序)
|- -linkedHashSet(去重,有序)
TreeSet (去重 ,可排序)
Map双列集合
HashMap(去重无序)
|- —— LinkedHashMap(去重,有序) (键不可以重复,值可以重复!) TreeMap(去重 ,可排序)
Shuffle乱序只有list集合可以使用! ListarrayList=new ArrayList<>(); arrayList.add(10); arrayList.add(12); arrayList.add(13); arrayList.add(14); arrayList.add(113); arrayList.add(15); Collections.shuffle(arrayList); System.out.println(“arrayList = “ + arrayList); //输出结果arrayList = [13, 10, 12, 14, 113, 15]
ArrayList集合的迭代器使用!iterator
ArrayListlist=new ArrayList(); list.add(“A”);list.add(“B”); list.add(“C”);list.add(“D”); list.add(“E”);Iterator it = list.iterator(); while (it.hasNext()){ System.out.println(it.next()+” “); //A B C D E } 利用迭代器删除元素 ArrayListlist=new ArrayList<>();list.add(10); list.add(23);list.add(123); list.add(1023);list.add(1234); Iterator it = list.iterator();while (it.hasNext()){ Integer i = it.next(); if(i<200){ it.remove(); } }System.out.println(“list = “ + list); //list= 123 1023 1234
字符串类型同样可取! list.add(“ok”); list.add(“pl”);list.add(“ok”); list.add(“wqd”);list.add(“qw”); Iterator it = list.iterator();while (it.hasNext()){ String next = it.next(); if(next==”ok”){ it.remove(); } }System.out.println(“list = “ + list); //list = [pl, wqd, qw]
Arraylist 集合 字符串根据首字找元素 (startsWith) public static void main(String[] args) { ArrayList list = new ArrayList<>(); list.add(“张无忌”); list.add(“周芷若”); list.add(“张敏”); list.add(“张翠山”); list.add(“汝阳王”); ArrayList zhanglist = new ArrayList(); for (String S : list) { if (S.startsWith(“张”)) { //找出集合中开头是张的元素 zhanglist.add(S); //[张无忌, 张敏, 张翠山] } } System.out.println(zhanglist); ArrayList threelist = new ArrayList(); for (String z:zhanglist){ if(z.length()==3){ //找出开始是张的元素中字符长度超过3位的! threelist.add(z); } } for (String s : threelist) { //遍历超过3位的集合 打印输出! System.out.println(s); //张无忌 张翠山 }}
Lamdba表达式 一段代码实现上面所以要求!
list.stream().filter(s -> s.startsWith(“张”)).filter(s -> s.length() == 3).forEach(System.out::println)); List:(生成流)filter:(过滤姓张)->(过滤长度) forEach(逐一打印注意格式) Lamdba表达式 对元素获取! public class Demo03 { public static void main(String[] args) { Listlist=new ArrayList<>(); list.add(“林青霞”); list.add(“张曼玉”); list.add(“张无忌”); list.add(“刘岩”); list.add(“张三丰”); list.add(“刘志强”); list.add(“张敏”); //将集合中张开头的元素打印在控制台 list.stream().filter(s ->s.startsWith(“”)).forEach(System.out::println); System.out.println(“=============”); //将集合中长度为3的元素输出在控制台 list.stream().filter(s -s.length()==3).forEach(System.out::println); System.out.println(“=============”); //将集合中的张开头,长度3的输出在控制台 list.stream().filter(s -> s.startsWith(“张”)).filter(s -> s.length()==3).forEach(System.out::println); } } Stream参与集合的各种类型使用生成方法:**
public class Test02 { public static void main(String[] args) { // ArrayList集合 使用流 Listlist=new ArrayList(); Stream liststream = list.stream(); // HashSet集合 使用流 Setset=new HashSet(); Stream setstream = set.stream(); // HashMap 集合 需要间接使用流 Mapmap=new HashMap(); Stream keySetstream = map.keySet().stream(); Stream valuesStream = map.values().stream(); Stream> entryStream = map.entrySet().stream(); //数组可以通过Stream接口的静态方法of(T…values)生成流 String[]strArray={“hello”,”world”,”java”}; Stream strArraySteam = Stream.of(strArray); Stream strArraySteam2 = Stream.of(“hello”, “world”, “java”); Stream integerStream = Stream.of(10, 20, 30);** } }**
Stream流使用方法: package com.itheima.Lamder1;** import java.util.ArrayList;import java.util.List;** public class Demo03 { public static void main(String[] args) { Listlist=new ArrayList<>(); list.add(“林青霞”); list.add(“张曼玉”); list.add(“张无忌”); list.add(“刘岩”); list.add(“张三丰”); list.add(“刘志强”); list.add(“张敏”); //将集合中张开头的元素打印在控制台 list.stream().filter(s -> s.startsWith(“张”)).forEach(System.out::println); System.out.println(“=============”); //将集合中长度为3的元素输出在控制台 list.stream().filter(s -> s.length()==3).forEach(System.out::println); System.out.println(“=============”); //将集合中的张开头,长度3的输出在控制台 list.stream().filter(s -> s.startsWith(“张”)).filter(s -> s.length()==3).forEach(System.out::println); }} 中间的再多的filter比较都可用&&并且来代替! list.stream().filter(s -> s.startsWith(“张”) && s.length() == 3).forEach(s -> System.out.println(s));
集合的嵌套 示例:List嵌套List! 班级演示
public class Demo05 { public static void main(String[] args) { List>gread=new ArrayList<>();
ListCLASS1=new ArrayList<>(); ListCLASS2=new ArrayList<>(); ListCLASS3=new ArrayList<>(); Collections.addAll(CLASS1, “张三”, “李四”, “王五”, “赵六”); Collections.addAll(CLASS2, “三”, “四”, “五”, “六”); Collections.addAll(CLASS3, “三国”, “问道”, “寻仙”, “赵六”); Collections.addAll(gread,CLASS1,CLASS2,CLASS3); for (List w : gread) { for (String s : w) { System.out.print (s+” “);}}}} // 张三 李四 王五 赵六 三 四 五 六 三国 问道 寻仙 赵六
List嵌套Map! 年纪演示 示例: public class Demo06 { public static void main(String[] args) { List>grade=new ArrayList<>(); Mapcls1=new HashMap<>(); cls1.put(1, “张二”); cls1.put(2, “王二”); cls1.put(3, “李三”); Mapcls2=new HashMap<>(); cls2.put(1, “李1”); cls2.put(2, “张2”); cls2.put(3, “王3”); Collections.addAll(grade, cls1, cls2); for (Map cls : grade) { Set> clsInfo = cls.entrySet(); for (Map.Entry stu : clsInfo) { System.out.println(“学生学号:”+stu.getKey()+” 学生名字:”+stu.getValue()); }}}}
Map嵌套Map集合
public class Demo06 { public static void main(String[] args) { Map> grade = new HashMap<>(); Map cls1 = new HashMap<>(); cls1.put(1, “张二”); cls1.put(2, “王二”); cls1.put(3, “李三”); Map cls2 = new HashMap<>(); cls2.put(1, “李1”); cls2.put(2, “张2”); cls2.put(3, “王3”); grade.put(“一年级一班”, cls1); grade.put(“一年级二班”, cls2); Set claNames = grade.keySet(); for (String claName : claNames) { System.out.println(“班级:” + claName); Map claMap = grade.get(claName); Set nums = claMap.keySet(); for (Integer num : nums) { String name = claMap.get(num); System.out.println(“学号:” + num + “ 名字:” + name);}}}}
Stream流的常见中间操作方法
Stream limit(long maxSize):截取指定参数个数的数据 Stream skip(long n):跳过指定参数个数的数据 static Stream concat(Stream a, Stream b):合并a和b两个流为一个流 Stream distinct():去除流中重复的元素。依赖(hashCode和equals方法) Stream sorted () : 将流中元素按照自然排序的规则排序 Stream sorted (Comparator<? super T> comparator) : 将流中元素按照自定义比较器规则排序
Map嵌套Map集合 示例:
public class Demo07 { public static void main(String[] args) { Map> supermarket= new HashMap<>(); Mapfoodsnacks1=new HashMap<>(); foodsnacks1.put(201,”火腿”); foodsnacks1.put(202,”鸡蛋”); foodsnacks1.put(203,”面包”); foodsnacks1.put(204,”方便面”); foodsnacks1.put(205,”烤肠”); Mapfoodfresh2=new HashMap<>(); foodfresh2.put(301,”鱼”); foodfresh2.put(302,”虾”); foodfresh2.put(303,”河蟹”); foodfresh2.put(304,”鱿鱼”); Mapfoodsweetmeats3=new HashMap<>(); foodsweetmeats3.put(401,”面包”); foodsweetmeats3.put(402,”蛋糕”); foodsweetmeats3.put(403,”甜甜圈”); foodsweetmeats3.put(404,”泡芙”); supermarket.put(“生鲜类”,foodfresh2); supermarket.put(“食品类”,foodsnacks1); supermarket.put(“甜品类”,foodsweetmeats3); Set lei = supermarket.keySet(); for (String leiName : lei) { System.out.println(“产品类别”+leiName); Map name = supermarket.get(leiName); Set num = name.keySet(); for (Integer nums : num) { String name1 = name.get(nums); System.out.println(“货号:”+nums+” 产品名称 :”+name1);}}}}**
Stream流中三类方法之一:中间方法 public class StreamDemo3 { public static void main(String[] args) { ArrayList list = new ArrayList<>(List.of(“曹操”, “曹孟德”, “曹阿瞒”, “曹阿瞒”, “曹阿瞒”, “刘备”, “刘玄德”, “刘皇叔”)); //1, Stream limit(long maxSize):截取指定参数个数的数据 list.stream().filter(s -> s.startsWith(“曹”)).forEach(System.out::print); //曹操曹孟德曹阿瞒曹阿瞒曹阿瞒 System.out.println(); System.out.println(“===================”); //2, Stream skip(long n):跳过指定参数个数的数据 list.stream().skip(1).forEach(System.out::print); //曹孟德曹阿瞒曹 阿瞒曹阿瞒刘备刘玄德刘皇叔 System.out.println(); System.out.println(“===================”); //3, static Stream concat(Stream a, Stream b):合并a和b两个流为一个流 Stream S1 = Stream.of(“A”, “B”, “C”); Stream S2 = Stream.of(“X”, “Y”, “Z”); Stream.concat(S1, S2).forEach(System.out::print); System.out.println(); System.out.println(“===================”); //4, Stream distinct():去除流中重复的元素。依赖(hashCode和equals方法) Stream.of(“X”, “Y”, “Z”, “Y”, “Z”).distinct().forEach(System.out::print); // list.stream().distinct().forEach(System.out::print); //曹操曹孟德曹阿瞒刘备刘玄德刘皇叔 System.out.println(); System.out.println(“===================”); //5 Stream sorted () : 将流中元素按照自然排序的规则排序 list.stream().sorted().forEach(System.out::print); //刘备刘玄德刘皇叔曹孟德曹操曹阿瞒曹阿瞒曹阿瞒 System.out.println(); System.out.println(“===================”); //6, Stream sorted (Comparator<? super T> comparator) : 将流中元素按照自定义比较器规则排序 Stream.of(“A”,”B”,”C”,”D”,”F”).sorted(((o2,o1)->o1.compareTo(o2))).forEach(System.out::print); System.out.println(); System.out.println(“===================”); //7 Stream limit(long maxSize):截取指定参数个数的数据 //取了前5个然后跳过前俩个输出! list.stream().limit(5).skip(2).forEach(s -> System.out.print(s)); // 曹操 曹孟德 曹阿瞒 //8 Map数据的转换 映射方法 streammap(Function< T,R>mapper)//Function函数式接口在存在抽象方法: // R apply(T t)将T(流中原有数据类型)类型转换为R类型(将要转换得类型)System.out.println(); System.out.println(“===================”);Stream.of(“张三-18”, “王五-26”, “李四-20”) .map((String str)->{ String[]arr=str.split(“-“); return new Student(arr[0],Integer.parseInt(arr[1])); }).forEach(System.out::println); ** }} 利用Steam创建Map集合并保存数据! public class StreamDemo7 { public static void main(String[] args) { ArrayList list = new ArrayList<>(); list.add(“zhangsan,23”); list.add(“lisi,24”); list.add(“wangwu,25”); // 需求1 : 保留年龄大于等于24岁的人 Mapmap=list.stream() .filter(str -> Integer.parseInt(str.split(“,”)[1]) >= 24) .collect(Collectors.toMap( //键的Funtion str->str.split(“,”)[0], //值的Funtion str->str.split(“,”)[1])); System.out.println(map);}}
有参数有返回值的接口lambda表达式 public class Demo05 { //测试类 public static void main(String[] args) { INTPL(140,110,(int a,int b)->{return a+b;}); INTPL(130, 120, (a, b) -> a - b);} public static void INTPL(int a, int b, Calculator calculator) { int result = calculator.calc(130, 120); System.out.println(“结果” + result);} interface Calculator { int calc(int a, int b); }} //接口
俩个ArrayList`集合合并为一个 public class Demo06 { _ public static void main(String[] args) { List one = new ArrayList<>(); one.add(“陈玄风”); one.add(“梅超风”);one.add(“陆乘风”); one.add(“曲灵风”);one.add(“武眠风”); one.add(“冯默风”);one.add(“罗玉风”); Stream S1 = one.stream().filter(s -> s.length() == 3).limit(3); System.out.println(“ “); List two = new ArrayList<>(); two.add(“宋远桥”);two.add(“俞莲舟”);two.add(“俞岱岩”);two.add(“张松溪”); two.add(“张翠山”);two.add(“殷梨亭”);two.add(“莫声谷”); Stream S2 = two.stream().filter(s -> s.startsWith(“张”)).skip(2); Stream.concat(S1, S2).map(s -> new Person(s)).forEach(System.out::println); }}
集合String 类型sort降序实现! public class Demo04 { public static void main(String[] args) { List list = new ArrayList<>(); Collections.addAll(list, “cab”, “bac”, “acb”, “cba”, “bca”, “abc”);** Collections.sort(list, new Comparator() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1);}}); System.out.println(“list = “ + list);}} //将集合要以降序排序 List list = new ArrayList<>(); list.add(100); list.add(300); list.add(200); ** //集合以降序排序(以前的做法:匿名对象) Collections.sort(list, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1;}}); // 最简化 Collections.sort(list, (o1, o2) -> o2 - o1);
File类的创建 /* 绝对路径 : 以盘符开始 相对路径 : 相对于IDEA工具项目下 /public class PathDemo { public static void main(String[] args) throws IOException { //相对路径类的创建 只能表示项目中的文件 File f2 = new File(“day10_demo\a.txt”); System.out.println( f2); File f3 = new File(“day10_demo\b.txt”); System.out.println(f3); //绝对路径类的创建 File f4 = new File(“D:\IDEA_Paper\Java_Employment\day10_demo\b.txt”); System.out.println(“f4 = “ + f4); } }*
File类的创建功能 : public class FileDemo2 { public static void main(String[] args) throws IOException { //1 public boolean createNewFile() : 创建一个新的空的文件 File f3 = new File(“day10_demo\美女.jpg”); boolean newFile = f3.createNewFile(); System.out.println(“newFile = “ + newFile); //true //返回boolean值 true 或者false! //第二次输出打印 就是false 文件实际存在 就返回false 文件不会被覆盖! //注意创建文件父目录一定要存在! 否则报错! //2 public boolean mkdir() : 创建一个单级文件夹 //只能创建单级别目录! File f4 = new File(“day10_demo/a1a1”); boolean mkdir = f4.mkdir(); System.out.println(“mkdir = “ + mkdir); //true //3 public boolean mkdirs() : 创建一个多级文件夹 !!! File f5 = new File(“day10_demo\a1\sss”); boolean mkdirs = f5.mkdirs(); System.out.println(“mkdirs = “ + mkdirs); //true }}
File类 删除文件!
public class FileDemo3 { public static void main(String[] args) { //删除文件 可以直接删除! File f1 = new File(“day10_demo\美女.jpg”); boolean delete = f1.delete(); System.out.println(“delete = “ + delete); //true ** ========================================**
//删除文件夹没有内容 可以直接删除! _File f2 = new File(“day10_demo\a1a1”); boolean delete1 = f2.delete();System.out.println(“delete1 = “ + delete1); //true ======================================= ** //删除文件夹内有内容 不能直接删除! 会返回false!//需要先做删除文件夹内容的操作! 然后才可以删除空的文件夹! File f3 = new File(“day10_demo\a1”);boolean delete2 = f3.delete(); System.out.println(“delete2 = “ + delete2); //false ** }}
File类的判断和获取功能!
public class FileDemo4 { public static void main(String[] args) { File f1 = new File(“day10_demo\a.txt”); //确实存在文件 File f2 = new File(“day10_demo\a1”); //确实存在的文件夹 File f3 = new File(“day10_demo\xaa.txt”); //不存在的文件! //public boolean isDirectory() 测试此抽象路径名表示的File是否为目录 System.out.println(f1.isDirectory()); //false System.out.println(f2.isDirectory()); //true System.out.println(f3.isDirectory()); //false //public boolean isFile() 测试此抽象路径名表示的File是否为文件 System.out.println(f1.isFile()); //true System.out.println(f2.isFile()); //false System.out.println(f3.isFile()); //false //public boolean exists() 测试此抽象路径名表示的File是否存在 System.out.println(f1.exists()); //true System.out.println(f2.exists()); //true System.out.println(f3.exists()); //false** System.out.println(“===========================”); //public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串 //绝对路径 System.out.println(f1.getAbsolutePath()); //返回带盘符的路径!** //public String getPath() 获取的是创建File对象给定的路径 System.out.println(f1.getPath()); // 返回你创建对象是给的路径 File后面new里面写什么就返回什么! // 写的是绝对路径是就返回绝对路径 // 写的是相对路径是就返回相对路径 //public String getName()返回由此抽象路径名表示的文件或目录的名称 System.out.println(f1.getName()); //a.txt //会有后缀跟着 因为文件和目录本身就有后缀** } }**
File类高级获取功能 public File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组**
public class FileDemo5 { public static void main(String[] args) { //获取这个文件夹下的所有文件目录! File f1 = new File(“day10_demo\统计文件个数文件夹”); File[] files = f1.listFiles(); for (File file : files) { System.out.println(“file = “ + file); //返回这个存在文件的所有子文件** //只能拿到该文件下的子文件信息—->子文件内的文件不会拿到! File有重写 toString所有可以直接打印数据出来! //所有子文件夹都会显示 //排序默认是按照建立在文件的字符串长度 然后判断a-z的字母顺序! } System.out.println(“统计文件个数文件夹里的个数有: “ + files.length); System.out.println(“=================”); //没有这个文件 所以返回null File f2 = new File(“day10_demo\333”); File[] files1 = f2.listFiles(); System.out.println(“files1 = “ + files1); //files1= null** System.out.println(“=================”); //有这个文件 但是不能直接获取文件 所以返回null File f3 = new File(“day10_demo\a.txt”); File[] files2 = f3.listFiles(); System.out.println(“files2 = “ + files2); //files2 = null** // 获取空文件夹 File f4 = new File(“day10_demo\nono”); File[] files3 = f4.listFiles(); System.out.println(“files3 = “ + files3 ); //files3 = [Ljava.io.File;@34ce8af7 } }**
统计一个文件夹中每种文件的个数并打印。
public class FileTest01 { public static void main(String[] args) { File dir = new File(“day10_demo\统计文件个数文件夹”); Map map = new HashMap<>(); File[] files = dir.listFiles(); //1.遍历文件夹中的所有子文件! for (File file : files) { //2.做一个只要文件的判断! if (file.isFile()) { String name = file.getName(); //按照切割.需要反编译所以前面加俩个// String[] names = name.split(“\.”);//按照点“.“进行切割! String suffix = names[names.length - 1];//防止文件名有.参与 所以获取最后一个元素 //用if做一个统计! if (map.containsKey(suffix)) { //存后面的后缀 Integer count = map.get(suffix);//获取原来的次数! count++; map.put(suffix, count);//将统计到的次数放回map集合! } else { map.put(suffix, 1);//如果没有 那就是第一次出现 从1开始! } } } Set> set = map.entrySet(); for (Map.Entry entry : set) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + “: “ + value + “ 个!”); } } }**
字节输出流步骤 1 创建字节输出流对象 2 写数据 3 释放资源 public class OutputStreamDemo1 { public static void main(String[] args) throws IOException { //创建流对象!public FileOutputStream(String name) //如果file02.txt不存在 就新创建 如果存在那就会清空数据 将所新写的内容放进去! FileOutputStream fos = new FileOutputStream(“day10_demo/file02.txt”); //写数据! 对应Ascally码表! fos.write(97);//a fos.write(98);//b fos.write(99);//c fos.write(‘A’);//A fos.write(‘B’);//B fos.write(‘C’);//C //关闭(释放)资源! fos.close(); }} 1 void write(int b) 一次写一个字节数据 2 void write(byte[] b) 一次写一个字节数组数据3 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据
public class OutputStreamDemo2 { public static void main(String[] args) throws IOException { //一: 创建字节输出流! FileOutputStream fos = new FileOutputStream(“day10_demo\file02.txt”); // 二: 写数据!** // 1 void write(int b) 一次写一个字节数据 fos.write(‘A’); //2 void write(byte[] b) 一次写一个字节数组数据 byte[] brr = {97, 98, 99, 100, 101};//abcde fos.write(brr); //3 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据 //off:索引为第3, len:写进去2个! fos.write(brr,3, 2); byte[] crr = {49, 53, 53, 51, 54, 52, 52, 53, 53, 57, 57};fos.write(crr, 0, 11); 手机号!!! //关闭资源! fos.close(); } }**
字节流创建txt文件内容之换行!
// windows : \r\n 换行定义为String类型 然后变量名.调用getBytes方法! 直接write就可以! String huanhang = “\r\n”;byte[] newline= huanhang.getBytes(); fos.write(newline); //换行定义一次后 可以重复使用!**
文件内容之拼接! //进行拼接 保留之前的内容 不会在每次执行被覆盖掉! FileOutputStream fos = new FileOutputStream(“day10_demo\file02.txt”,true);
字节输入流 注意输出流会帮你创建没有的文件,但是输入流不会!
InputStream类 : 字节输入流最顶层的类 , 抽象类
public class FileInputStreamDemo1 { public static void main(String[] args) throws IOException {** // 1 创建字节输入流对象 必须保证文件存在 要不然会报错! 因为输入读取不会创建新文件! FileInputStream fis = new FileInputStream(“day10_demo\file02.txt”);** // 2 读数据 //单个读取fis.read.sout System.out.println(fis.read());//97 int b; while ( (b=fis.read())!=-1){ System.out.print((char)b); } //3 释放资源 fis.close(); } }**
使用I输入O输出 对文件的复制!
复制文件,其实就把文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地) 数据源 : “D:ASCLL码表.png” 目的地 : “day10_demo\ASC.png”**
public class FileInputStreamDemo2 { public static void main(String[] args) throws IOException { String src = “D:\AAA\ASCLL码表.png”;//数据源 String dest = “day10_demo\ASCLL码表.png”;//目的地 //创建 输入 输出! FileInputStream fis = new FileInputStream(src); //fis输入数据 FileOutputStream fos = new FileOutputStream(dest);//fos读取数据! int b; while ((b = fis.read()) != -1) {//将字节从源文件中读取到内存中用b变量保存 fos.write(b); } //关闭资源 先开的后关闭 后开的先关闭! fos.close(); fis.close(); } } 整合try关闭资源 不需要手动写重复代码! public class FileInputStreamDemo3 { public static void main(String[] args) {** String src = “D:\AAA\ASCLL码表.png”;//数据源 String dest = “day10_demo\ASCLL码表.png”;//目的地 //创建 输入 输出! try ( FileInputStream fis = new FileInputStream(src); //fis输入数据 FileOutputStream fos = new FileOutputStream(dest);//fos读取数据! ) { int b; while ((b = fis.read()) != -1) fos.write(b); } catch (IOException e) { e.printStackTrace();//关闭资源 先开的后关闭 后开的先关闭! }} } 字符输入流 字节数组读取内容案例! public class FileInputStreamDemo5 { public static void main(String[] args) throws IOException {//public String(byte[] bytes, int startIndex, int length) : 把字节数组的一部分转成字符串 try (FileInputStream fis = new FileInputStream(“day10_demo\a.txt”)) { byte[] buf = new byte[10]; //定义一个数组缓冲区,临时保存每次读取的字节 int len; //临时保存每次读取的字节个数! while ((len = fis.read(buf)) != -1) { //将读取的数据 变成字符串! String s = new String(buf, 0, len); System.out.print(s); //helloworldhelloworldhelloworldhelloworldhelloworldhelloworld } } catch (IOException e) { e.printStackTrace(); } } }**
提高拷贝速度案例! public class FileInputStreamDemo2 { public static void main(String[] args) throws IOException { String src = “D:\AAA\ASCLL码表.png”;//数据源 String dest = “day10_demo\AS表.png”;//目的地** FileInputStream fis = new FileInputStream(src); //fis输入数据 FileOutputStream fos = new FileOutputStream(dest);//fos读取数据! byte[] buf = new byte[8*1024]; int len; while ((len = fis.read(buf)) != -1) {//把读取的有效数据写到数据中 fos.write(buf,0,len); //长度要写读取到的len! } //关闭资源 先开的后关闭 后开的先关闭! fos.close(); fis.close(); }} package com.itheima.Day10Work;**import java.io.File; import java.io.FileInputStream;import java.io.FileNotFoundException; import java.io.IOException;*/ 在你计算机的一个盘(比如D盘)根目录下创建一个文件,名字叫做 file01.txt。保存以下内容(要求是单字节字符,比如字母或者数字) file01.txt** abcdef123456 1. 使用字节输入流 一次读取一个字节的方法将file01.txt的文件读取并打印 2. 使用字节输入流一次读取多个字节 的方法将file01.txt的文件读取并打印/public class Demo01 { public static void main(String[] args) throws IOException { read1(); read2();** } public static void read1() throws IOException {** FileInputStream fis = new FileInputStream(“D:\file01.txt”); int b; while ((b = fis.read()) != -1) { System.out.print((char) b); } fis.close(); } public static void read2() throws IOException { FileInputStream fis = new FileInputStream(“D:\file01.txt”); byte[] bys = new byte[1024]; int len; while ((len = fis.read(bys)) != -1) { System.out.println(new String(bys, 0, len)); }** } }*
package com.itheima.Day10Work;** import java.io.File;import java.io.FileInputStream; import java.io.FileOutputStream;import java.io.IOException;** //在D盘中创建两个文件夹,img1,img2。在img1中放置一个图片文件,// 将img1中的图片文件使用字节流复制到img2中。 public class Demo02 { public static void main(String[] args) throws IOException {** File f1=new File(“D:\img1”); boolean mkdirs1 = f1.mkdirs();** File f2=new File(“D:\img2”); boolean mkdirs = f2.mkdirs(); String src=”D:\img1\A1.png”; String dest=”D:\img2\b1.png “; FileInputStream fis=new FileInputStream(src); FileOutputStream fos = new FileOutputStream( dest); byte[]buf=new byte[81024]; int len; while ((len=fis.read(buf))!=-1){ fos.write(buf,0,len); } fos.close(); fis.close(); } } *
**//```java //登鹳雀楼//王之涣 //白日依山尽,//黄河入海流。 //欲穷千里目,//更上一层楼。 public class Demo03 { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream(“day10_demo\JAVA”, true); byte[] bytes = “登鹳雀楼 王之涣 白日依山尽 黄河入海 流欲穷千里目 更上一层楼”.getBytes(); System.out.println(Arrays.toString(bytes)); fos.write(bytes); fos.close();** } } 复制拷贝单字节的try方法! String sre=“D:/abc/caocao.jpg”; //数据存放地! String dest= “day10_demo/hello/caocao.jpg”; //要复制到的地方! Try( FileInputStream fis=new FileInputStream(src); FileOutputStream fos = new FileOutputStream(dest); ){ Int b; While((b=fis.read()) !=-1 ){ Fos.write(b); } } 复制拷贝数组字节的try方法! Public int read(byte [] buf)一次读取多个字节保存到数据! FileInputStream fis=···· FileOutputStream fos = ··· Int len; Byte[] buf=byte[1024]; //每次读书有效字节个数! Whild( ( len = fis.read (buf) ) !=-1 ){ Fos.write(buf,0,len); //写入有效数据! }**
if (fos != null) { // 3 释放资源 try { fos.close(); } catch (IOException e)
package com.itheima.Day10Work;** import java.io.FileInputStream; import java.io.IOException;//将题目1中文件的诗文使用字符输入流读取并打印到控制台。 public class Demo04 { public static void main(String[] args) throws IOException {** try (FileInputStream fis = new FileInputStream(“D:\img1\i1.txt”); ) { byte[] buf = new byte[10]; int len; while ((len =fis.read(buf))!=-1){ String s=new String(buf,0,len); System.out.print(s); } }catch (IOException e){ e.printStackTrace(); } } }**
IO流的意思!
输出输入流,将写入的数据文件,实现永久存储或将文件中的数据读取到内存中! 之前所用的集合 在程序运行结束后 数据也随之消失!
IO流的顶级父类!
FileInputStream 类 Inputstream 类 FileOutputStream 类
OutputStream 类
Closeable 接口
AutoCloseable 接口/*请使用FileWriter向文件输出:HelloWorld 字符写入文件! 1. 用 try-catch-finally
方式处理异常。 2. 用 try-with-resource
方式处理异常。*/ public class Demo06 { public static void main(String[] args) throws IOException { teat01(); test02(); }** public static void teat01() throws IOException { FileOutputStream fos = null; try { fos = new FileOutputStream(“day10_demo\a.txt”); byte[] arr = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘W’, ‘o’, ‘r’, ‘l’, ‘d’}; fos.write(arr); String huanhang = “\r\n”; byte[] newline = huanhang.getBytes(); fos.write(newline); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } //2. 用 try-with-resource
方式处理异常 public static void test02() { FileOutputStream fos = null; try { fos = new FileOutputStream(“day10_demo\a.txt”); byte[] arr = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘W’, ‘o’, ‘r’, ‘l’, ‘d’}; fos.write(arr); } catch (IOException e) { e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
load方法 文件中的键值对 读取到内存中!(读取) 注意:Properties文件中的键值对信息必须是一行一个键值对! 否则会认为 (=) 后面都是值! public class PropertiesDemo3 { public static void main(String[] args) { Properties pro=new Properties(); //文件中的键值对保存到内存中,Propertise对象中! //1.构造一个字节输入流 用来关联文件!就是找文件! try(FileInputStream fis =new FileInputStream(“day11_demo\src\user.properties”) ){ //2.调用load方法,加载数据(读取)! pro.load(fis); //3.打印结构 System.out.println(“pro = “ + pro); }catch (IOException e){ e.printStackTrace(); } }Properties 中的注释用#号键表示!}包名 路径名 模块 包括此类信息都使用英文!
Stors方法 用来保存数据!(写入)
//将内存中的数据保存到硬盘Properties文件下! public class PropertiesDemo3 { public static void main(String[] args) { test02(); } public static void test02(){ Properties pro=new Properties(); pro.setProperty(“username”, “root”); pro.setProperty(“password”, “root”); try(FileOutputStream fos=new FileOutputStream(“day11_demo\db.properties”)){ pro.store(fos,”This is comments 这是注释!”); }catch (IOException e){ e.printStackTrace();** } }
(System.currentTimeMills 计算程序运行时间!)
需求:在properties文件中手动写上姓名和年龄,读取到集合中,将该数据封装成javabean学生对象 将文件的信息读取到 控制台 并封装成Student类对象!public class PropertiesTest { public static void main(String[] args) { Properties pro=new Properties(); try (FileInputStream fis=new FileInputStream(“D:\IDEA_Paper\Java_Employment\day11_demo\Student.properties”)){ pro.load(fis); Student stu = new Student(pro.getProperty(“name”), Integer.parseInt(pro.getProperty(“age”))); System.out.println(“stu = “ + stu); }catch (IOException e){ e.printStackTrace(); } } }**class Student{····}
将文件的信息读取到控制台 读取以.properties结尾的配置文件(简化写)
public class ResourceBundleDemo { public static void main(String[] args) { //1.获取ResourceBundle 对象,指定src里面的属性文件! ResourceBundle budle = ResourceBundle.getBundle(“iphone”); //2.get String获取键的对应值! String brand = budle.getString(“brand”); System.out.println(“brand = “ + brand); }}
递归 阶乘(方法直接调用自己!) /*求num的阶层 mian方法中jc(5).var 写几就是求几的阶乘 5!=5X4X4X3X2X1 4!=4X3X2X1 3!=3X2X1 2!=2X1 1!=1X1 @param n @parampublic static long jc (int n) { //n!=n(n-1); if(n==1){ return 1; } else { return n jc(n-1); } } 把大问题(5)消化为小问题(4)··直到解决完最小问题(1) 所以都解决了! 使用递归删除计算机中指定的文件夹 ** public static void deleteFile(File file){ ** //对传进来的文件进行判断是否存在 ** if(!file.exists()){ //不存在对异常进行捕获 并返回文件不存在 throw new RuntimeException(“文件不存在”); } if(file.isFile()){ file.delete(); //判断如果是文件那就直接删除! System.out.println(“删除文件为: “ + file); //递归的出口 当某一个子文件没有了子文件夹什么都没有了,递归就结束了! }else { //走到这个说明file是文件夹!删除只能删除空文件夹 // 先把该子文件(包含文件,目录)删除! 那么就要对该文件夹进行遍历! ** File[] files = file.listFiles(); for (File childFile : files) { deleteFile(childFile); } ** //子文件删除干净后,在删除当前空文件夹! ** file.delete(); System.out.println(“删除文件夹: “ + file); } }} 作业示例: 作业1; package com.itheima.Day11Work; //请将D:盘下的一个文件复制到E:盘下,例如:d:\视频.itcast,复制到 E:\视频.itcast。 import java.io.*; //请使用“字节缓冲流”:BufferedInputStream和BufferedOutputStream实现 public class Demo01 { public static void main(String[] args) { String src = “D:\java学习资料\写读.png”; String dest = “D:\java\写读01.png”; try ( FileInputStream fis = new FileInputStream(src); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(dest); BufferedOutputStream bos = new BufferedOutputStream(fos);
) { byte[]buf=new byte[81024]; int b; while ((b = fis.read(buf)) != -1) { fos.write(buf,0,b); } } catch (IOException e) { e.printStackTrace(); }} } 作业2; package com.itheima.Day11Work; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; / 请编写main()方法,定义一个存储String的集合:List,并初始化以下数据: List list = new ArrayList<>(); list.add(“迪丽热巴”); list.add(“古力娜扎”); list.add(“周杰伦”); list.add(“蔡徐坤”); 请定义“字符缓冲输出流”BufferedWriter将集合中的数据写入到文件:Task1_2.txt中,每个名字一行。*/ public class Demo02 { public static void main(String[] args) { List list = new ArrayList<>(); list.add(“迪丽热巴”); list.add(“古力娜扎”); list.add(“周杰伦”); list.add(“蔡徐坤”); try ( FileWriter fw = new FileWriter(“day11_demo\fali01.txt”); BufferedWriter bw = new BufferedWriter(fw); ) { String str; for (String s : list) { str = s; bw.write(str+”\r\n”); } } catch (IOException e) { e.printStackTrace(); } } }
作业3; package com.itheima.Day11Work; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /请编写main()方法,定义一个字符缓冲输入流BufferedReader, 读取Task1_2.txt文件,一次读取一行, 将读取的内容存储到一个List\集合中,遍历、并打印集合中的每个元素: //1.定义一个字符缓冲输入流 BufferedReader in = new BufferedReader(……); //2.定义一个集合 List list = new ArrayList<>(); / //3.一次读取一行 public class Demo03 { public static void main(String[] args) { List list = new ArrayList<>(); new ArrayList<>(); try ( FileReader fr = new FileReader(“day11_demo\fali01.txt”); BufferedReader br = new BufferedReader(fr); ) { String text; while ((text=br.readLine())!=null){ String[] split = text.split(“\r\n”); System.out.println(split[0]); list.add(split[0]); } System.out.println(“list = “ + list); } catch (IOException e) { e.printStackTrace(); } } }
作业4; import java.io.*; import java.util.ArrayList; import java.util.List;
public class Demo04 { public static void main(String[] args) { List stuList = new ArrayList<>(); stuList.add(new Student(“迪丽热巴”, “女”, 18, 99)); stuList.add(new Student(“古力娜扎”, “女”, 19, 98)); stuList.add(new Student(“周杰伦”, “男”, 20, 88)); stuList.add(new Student(“蔡徐坤”, “男”, 19, 78)); try ( FileWriter fw = new FileWriter(“day11_demo\fali01.txt”); BufferedWriter bw = new BufferedWriter(fw); ) { for (Student student : stuList) { StringBuffer sb = new StringBuffer(); sb.append(student.getName()).append(“,”).append(student.getSex()).append(“,”).append(student.getAge()).append(“,”).append(student.fenshu); bw.write(sb.toString()); bw.newLine();
} } catch (IOException e) { e.printStackTrace(); } } }
作业5; package com.itheima.Day11Work; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List;
/## 题目5 请编写main()方法,定义一个字符缓冲输入流BufferedReader对象,读取”test1_4.txt”文件,一次读取一行,将每行数据封装为一个Student对象,并将Student对象存储到一个集合。遍历并打印集合的所有Student信息。 //定义一个BufferedReader对象 BufferedReader in = new BufferedReader(……); //定义一个集合 List stuList = new ArrayList<>(); //一次读取一行 …… ``` / public class Demo05 { public static void main(String[] args) { List list = new ArrayList<>(); try ( FileReader fr = new FileReader(“day11_demo\test1_4.txt”); BufferedReader br = new BufferedReader(fr); ) { String str; while ((str=br.readLine())!=null){ System.out.println(“str = “ + str); } } catch (IOException e) { e.printStackTrace(); } } }
作业6; //# 【转换流】 // 现有一字符串:”我爱Java”。将该字符串保存到当前项目根目录下的a.txt文件中。 // 要求:使用gbk编码保存。 // 注意:idea的默认编码是utf-8, // 所以可以通过file -> settings -> file encodings设置为gbk格式, // 否则打开a.txt文件看到的将会是乱码。 public class Demo06 { public static void main(String[] args) { try ( FileOutputStream fos=new FileOutputStream(“day11_demo\fali01.txt”); OutputStreamWriter osw=new OutputStreamWriter(fos,”GBK”); ) { String str=”我爱java”; osw.write(str); } catch (IOException e) { e.printStackTrace(); } } } 作业7; package com.itheima.Day11Work; //需求: // 利用转换输入流将当前项目根目录下使用gbk编码的a.txt文件的内容读取出来,并打印在控制台上。 import java.io.; // 要求:不能出现乱码的情况。 public class Demo07 { public static void main(String[] args) { try ( FileInputStream fis = new FileInputStream(“day11_demo\fali01.txt”); InputStreamReader isr = new InputStreamReader(fis, “GBK”); ) { int c; while ((c = isr.read()) != -1) { System.out.print((char) c); } } catch (IOException e) { e.printStackTrace(); } } } 作业8; package com.itheima.Day11Work; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; / ## 题目8 需求: 1. 定义一个学生类,包含姓名,年龄,性别等成员变量,提供setters和getters方法以及构造方法。 2. 在测试类中创建一个学生对象,给学生对象的三个成员变量赋值。然后将该对象保存到当前项目根目录下的stu.txt文件中。*/ public class Demo08 { public static void main(String[] args) { Student01 student01=new Student01(“张三”,10,”男”); try ( FileOutputStream fos=new FileOutputStream(“day11_demo\stu.txt”); ObjectOutputStream obs=new ObjectOutputStream(fos); ){ obs.writeObject(student01);
} catch (IOException e) { e.printStackTrace(); } } } 作业9; package com.itheima.Day11Work; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; //需求:将上一题(序列化流题目1)保存到stu.txt文件中的学生对象读取出来。 public class Demo09 { public static void main(String[] args) { try( FileInputStream fis=new FileInputStream(“day11_demo\stu.txt”); ObjectInputStream ois=new ObjectInputStream(fis); ){ Student01 S1=(Student01)ois.readObject(); System.out.println(“S1 = “ + S1); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } 作业10; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Scanner; //需求:从键盘录入一行字符串,利用字节打印流将该行字符串保存到当前项目根目录下的d.txt文件中。 public class Demo10 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(“请输入你要写的数据!”); String str=sc.nextLine(); try ( FileOutputStream fos=new FileOutputStream(“day11_demo\b.txt”); OutputStreamWriter osw=new OutputStreamWriter(fos); ){ osw.write(str); } catch (IOException e) { e.printStackTrace(); } } } 俩种复制的高效方法!
public class Test1 { public static void main(String[] args) throws IOException {
// public static int copy(InputStream in, OutputStream out): // 把input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数(适合文件大小为2GB以下)
FileInputStream in = new FileInputStream ( "day11_demo\\fali.txt" );< br /> FileOutputStream out = new FileOutputStream ( "day10_demo\\fa1.txt" );< br /> IOUtils . copyLarge ( in , out );
// public static long copyLarge(InputStream in, OutputStream out): // 把input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数(适合文件大小为2GB以上) FileInputStream IN =new FileInputStream (“D:\IDEA_Paper\Java_Employment\day11_demo\GBK编码文件.txt”); FileOutputStream FO=new FileOutputStream(“day10_demo\gbk.txt”); IOUtils.copy(IN, FO); }}
public class Test2 { public static void main(String[] args) throws IOException { //复制文件到另外一个目录下。 File src=new File(“day11_demo\fali.txt”);//要拷贝的文件 File destDir=new File(“day11_demo\fali02\fali001.txt”);//目标文件 FileUtils.copyFileToDirectory(src, destDir); // 复制src目录到dest目录中。 File src1=new File(“day11_demo\fali.txt”); File desrDir1=new File(“D:\java学习资料”); FileUtils.copyDirectoryToDirectory(src1, desrDir1); } }
将文件上传到指定IP的主机。package com.itheima.Day13Work; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;// 服务端 并有线程池 _public class Demo03ServerSocket { public static void main (String [] args ) throws IOException { ExecutorService theradPool = Executors._newFixedThreadPool(_20 ); ServerSocket socket = new ServerSocket (523 ); while (true ) { System._out .println( “服务端开启,等待连接。。。。。”) ; Socket snein = socket.accept() ; System.out .println( “服务器已连接” + System.currentTimeMillis()) ; com.itheima.Day13Work.FileUplodaTask1 fileUplodaTask = new com.itheima.Day13Work.FileUplodaTask1(_snein ); theradPool.submit (fileUplodaTask ); } } }class FileUplodaTask1 implements Runnable { private Socket socket; public FileUplodaTask1 (Socket socket ) { this.socket = socket; } @Override public void run () { FileOutputStream localOut = null; try { InputStream netIn = socket.getInputStream (); localOut = new FileOutputStream (“day12_demo\server\“ + System._currentTimeMillis() + “.png”) ; int len; byte[] _buf = new byte [8 * 1024 ]; while ((len = netIn.read (buf )) != -1 ) { localOut.write (buf, 0, len ); } OutputStream netOut = socket.getOutputStream (); netOut.write (“恭喜上传成功!”.getBytes ()); socket.close (); } catch (IOException e ) { System._out .println( “作业三上传出错了,建议检查!”) ; } _finally { if (socket != null ) { try { localOut.close (); } catch (IOException e ) { e.printStackTrace (); } } } } } package com.itheima.Day13Work; //需求:将文件上传到指定IP的主机。 // 1. TCP的服务端可以接受多个客户端的连接 // 2. TCP的客户端上传文件到服务器端 // 3. 文件保存到 c:/java/file 文件下,文件名随机生成,只要不出现文件覆盖即可。 // 4. 服务器端需要反馈上传状态(成功或失败)给客户端。 // 思路: // 1、文件名可以使用当前系统时间的毫秒,保证是随机的且不会重复 //2、多个客户端要同时上传文件,可以使用多线程技术import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; // 2、多个客户端要同时上传文件,可以使用多线程技术public class Demo03Socket { public static void main (String [] args ) throws IOException { // 1. 客户端 Socket socket=new Socket (“127.0.0.1”,523 ); OutputStream netOut = socket.getOutputStream (); FileInputStream locaIn=new FileInputStream (“D:\java学习资料\aaa.png” ); int len; byte []buf=new byte [8*1024 ]; while ((len=locaIn.read (buf ))!=-1 ){ netOut.write (buf,0,len ); } socket.shutdownOutput (); InputStream netIn = socket.getInputStream (); len= netIn.read (buf ); System._out .println( “收到系统消息!”+new String(_buf,0,len )); locaIn.close (); socket.close (); } }_
单例设计模式 _//定义一个皇帝类,要求任何地方拿到的皇帝对象都是相同的对象。使用饿汉及懒汉单例设计模式实现 _public class Demo09 { public static void main (String [] args ) { for (int i = 0; i < 10; i++ ) { King1 k2 = King1._getInstance() ; System.out .println( “k2 = “ + k2) ; } } } _class King1 { _private String name;
public King1_ ( _String name_ ) {< br /> _this . name = name ;< br /> _ }< br /> _private static final King1 _instance _ = new King1_ ( _ "唐太宗" _ ) _ ;
public static King1 getInstance_ () {< br /> _return _instance_ ;< br /> _ }< br /> } _
定义一个皇帝类,要求任何地方拿到的皇帝对象都是相同的对象。使用饿汉及懒汉 package com.itheima.Day13Work; public class Demo0902 { _public static void main (String [] args ) { for (int i = 0; i < 10; i++ ) { King02 k2 = King02._getInstance() ; System.out .println( “k2 = “ + k2) ; } } } _class King02 {
_private String name ;< br /> public King02_ () {< br /> }
_public King02_ ( _String name_ ) {< br /> _this . name = name ;< br /> _ }< br /> _private static King02 _instance_ ;< br /> public static synchronized King02 getInstance_ (){< br /> _if_ ( instance _ == null_ ){< br /> instance_ = new King02_ ( _ "乾隆帝" _ ) _ ;< br /> _ }< br /> _return _instance_ ;< br /> _ }< br />} _
基础TCP通讯import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket;/# 【TCP通讯】 1. 请定义TCP的客户端,向服务器端发送一条信息:你好,我是客户端小白。 2. 请定义TCP的服务器端,接收这条信息,并打印到控制台 / _public class Demo01ServerSocket { public static void main (String [] args ) throws IOException { ServerSocket serverSocket=new ServerSocket (521 ); System._out .println( “程序已经启动,等待连接….”) ; Socket socket = serverSocket.accept() ; System.out .println( “连接成功~~~”) ; InputStream netIn = socket.getInputStream() ; byte[]_buf=new byte [1024 ]; int len = netIn.read (buf ); System._out .println(_new String (buf,0,len )); socket.close (); serverSocket.close ()_;
_ }< br />} _
import java.io.IOException; import java.io.OutputStream; import java.net.Socket;
public class Demo01Socket { _public static void main (String [] args ) throws IOException { Socket socket=new Socket (“127.0.0.1”,521 ); OutputStream netps = socket.getOutputStream (); netps.write (“今天作业题一!”.getBytes ()); socket.close (); } }_
多列模式设计类//定义一个类,用来描述公司的公用车。公司固定只有3辆车。使用多例模式进行设计类,使获取车的对象总是固定的三辆车。 //步骤: //1. 定义静态字段,用来设定实例个数 //2. 定义静态的集合,用来保存多例 //3. 私有化构造方法 //4. 静态代码块中进行对多例初始化 //5. 提供静态方法将某个实例返回 _public class CompanyCar { _private String name;
public CompanyCar_ ( _String name_ ) {< br /> _this . name = name ;< br /> _ }
_private static final int _COUNT _ = 3 ;< br /> private static final List_ < _CompanyCar_ > list _ = new ArrayList_ <>() _ ;
static _ {< br /> _for _ ( _int i = 0 ; i < _COUNT_ ; i ++ _ ) {< br /> list_ . add_ ( _new CompanyCar_ ( _ "公司车辆" + i_ )) _ ;< br /> _ }< br /> }
_public static CompanyCar getCar_ () {< br /> _Random rd = new Random_ () _ ;< br /> return _list_ . get_ ( _rd . nextInt_ ( COUNT )) _ ;< br /> _ }
_@Override < br /> public String toString_ () {< br /> _return "Car{" +< br /> "name='" + name + '\'' +< br /> '}' ;< br /> _ }< br />} _ < br />**测试类!**< br /> public class CarTest10 _ {< br /> _public static void main_ ( _String_ [] _args_ ) {< br /> _for _ ( _int i = 0 ; i < 10 ; i ++ _ ) {< br /> _CompanyCar car = CompanyCar . _getCar () _ ;< br /> System . _out_ . println_ ( _ "公司车次:" + car_ ) _ ;< br /> _ }< br /> }< br />} _
生成一个工厂类!测试类! public class CarFactoryTest11 { _public static void main (String [] args ) { CarFactory carFactory=new CarFactory (); Car bwm = carFactory.produtCar01 (CarType._BWM) ; bwm.run() ; Car benz = carFactory.produtCar01(_CarType._BENZ) ; benz.run() ; } } package com.itheima.Day13Work; _/ 定义工厂类专门获取各类车的对象。 可以按照以下步骤进行设计: 1.编写一个Car接口,提供run方法 2.编写一个Bmw类实现Car接口,重写run方法 3.编写一个Benz类实现Car接口 4.提供一个CarFactory(汽车工厂),用于生产汽车对象 5.定义CarFactoryTest测试汽车工厂 /
public class CarFactory { CarFactory (){
}< br /> _public Car produtCar01_ ( _CarType carType_ ){< br /> _switch _ ( _carType_ ){< br /> _case _BWM_ :< br /> return new Bwm_ () _ ;< br /> case _BENZ_ :< br /> return new Benz_ () _ ;< br /> default :< br /> return null ;< br /> _ }< br /> }< br />} _ < br /> public interface Car _ {< br /> _void run_ () _ ;< br /> _ } _ < br /> package com . itheima . Day13Work ;
public class Bwm implements Car{ @Override public void run() { _System._out .println( “坐在宝马上写 作业第11题!!!”) ; } } public class Benz implements Car{ @Override public void run() { _System._out .println( “坐在奔驰上写 作业第11题!!!”) ; } }
实现客户端 服务端的文件上传和下载!/ 需求 : 文件上传和下载 服务端 //创建服务端对象,指定端口 //等待接收客户端的连接accept //获取网络的输入流 读取客户端发生的信息 //创建一个本地输出流 用来保存文件 //获取一个网络输出流,告知客户端上次成功 //释放资源 / _public class ServerDemo { public static void main (String [] args ) throws IOException { //创建服务端对象,指定端口 ServerSocket serverSocket = new ServerSocket (1212 ); //等待接收客户端的连接accept while (true ) { System._out .println( “等待客户端的连接!!!!”) ; Socket socket = serverSocket.accept() ; System.out .println( “客户端连接成功!!”) ; //获取网络的输入流 读取客户端发生的信息 _InputStream netIn = socket.getInputStream (); //创建一个本地输出流 用来保存文件 FileOutputStream localOut = new FileOutputStream (“day12_demo\server\“+ UUID._randomUUID() +”.png”) ; int len; byte[] _buf = new byte [8 * 1024 ]; while ((len = netIn.read (buf )) != -1 ) { localOut.write (buf, 0, len ); } //获取一个网络输出流,告知客户端上次成功 OutputStream netOut = socket.getOutputStream (); netOut.write (“恭喜上传OK!”.getBytes ()); //释放资源 localOut.close (); socket.close (); } } } / 需求 : 文件上传和下载 客户端 //socket对象 指定服务端的地址和端口 //获取一个输出流用来发送文件数据 //创建一个本地文件输入流,用来读取本地文件 //边读边写 //告诉服务端 数据写出完毕了 //获取一个网络的输入流,用来读取服务端响应的数据 //释放资源 /public class ClientDemo { public static void main (String [] args ) throws IOException { //socket对象 指定服务端的地址和端口 Socket socket = new Socket (“127.0.0.1”, 1212 ); //获取一个输出流用来发送文件数据 OutputStream netout = socket.getOutputStream (); //创建一个本地文件输入流,用来读取本地文件 FileInputStream locaIn = new FileInputStream (“D:\java学习资料\aaa.png” ); //边读边写 int len; byte [] buf = new byte [8 * 1024 ]; while ((len = locaIn.read (buf )) != -1 ) { netout.write (buf, 0, len ); } //告诉服务端 数据写出完毕了 socket.shutdownOutput (); //获取一个网络的输入流,用来读取服务端响应的数据 InputStream netIn = socket.getInputStream (); len = netIn.read (buf ); System._out .println( “收到服务器信息” + new String(_buf, 0, len )); //释放资源 locaIn.close (); socket.close ()_;
_ }< br />} _
实现SQL中数据存入集合并进行遍历!` public class JABCDemo04 { _public static void main (String [] args ) throws SQLException { String url = “jdbc:mysql:///day02?useSSL=false”; String username = “root”; String pass = “1234”; Connection conn = DriverManager._getConnection(_url, username, pass ); //3.定义sql语言 String sql = “select * from emp”; //获取对象 Statement stmt = conn.createStatement (); //执行sql ResultSet rs = stmt.executeQuery (sql ); List <_Account_> list = new ArrayList <>()_;
while _ ( _rs . next_ ()) {< br /> _Account accout = new Account_ () _ ;
_ //6.2 获取数据<br /> _int id = rs.getInt_(_"id"_)_;<br /> String name = rs.getString_(_"name"_)_;<br /> String gender = rs.getString_(_"gender"_)_;
_ //给对象进行赋值!<br /> _accout.setId_(_id_)_;<br /> accout.setName_(_name_)_;<br /> accout.setGender_(_gender_)_;<br /> _//将对象存入集合!<br /> _list.add_(_accout_)_;
_ }< br /> _System . _out_ . println_ ( _list_ ) _ ;< br /> _ //关闭资源<br /> _rs.close_()_;<br /> stmt.close_()_;<br /> conn.close_()_;
_ }< br />} _ `