目录
Collections 工具类
Collections 工具类介绍
排序操作:(均为 static 方法)
0545_韩顺平Java_Collections工具类1_哔哩哔哩_bilibili
0546_韩顺平Java_Collections工具类2_哔哩哔哩_bilibili
@SuppressWarnings({"all"}) public class Collections_ { public static void main(String[] args) { //创建ArrayList 集合,用于测试. List list = new ArrayList(); list.add("tom"); list.add("smith"); list.add("king"); list.add("milan"); list.add("tom"); // reverse(List):反转 List 中元素的顺序 Collections.reverse(list); System.out.println("list=" + list); // shuffle(List):对 List 集合元素进行随机排序 // for (int i = 0; i < 5; i++) { // Collections.shuffle(list); // System.out.println("list=" + list); // } // sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 Collections.sort(list); System.out.println("自然排序后:"); System.out.println("list=" + list); // sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序 //我们希望按照 字符串的长度大小排序 Collections.sort(list, new Comparator() { @Override public int compare(Object o1, Object o2) { //可以加入校验代码. return ((String) o2).length() - ((String) o1).length(); } }); System.out.println("字符串长度大小排序=" + list); // swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换 //比如 Collections.swap(list, 0, 1); System.out.println("交换后的情况:"); System.out.println("list=" + list); //Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素 System.out.println("自然顺序最大元素=" + Collections.max(list)); //Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素 //比如,我们要返回长度最大的元素 Object maxObject = Collections.max(list, new Comparator() { @Override public int compare(Object o1, Object o2) { return ((String)o1).length() - ((String)o2).length(); } }); System.out.println("长度最大的元素=" + maxObject); //Object min(Collection) //Object min(Collection,Comparator) //上面的两个方法,参考max即可 //int frequency(Collection,Object):返回指定集合中指定元素的出现次数 System.out.println("tom出现的次数=" + Collections.frequency(list, "tom")); //void copy(List dest,List src):将src中的内容复制到dest中 ArrayList dest = new ArrayList(); //为了完成一个完整拷贝,我们需要先给dest 赋值,大小和list.size()一样 for(int i = 0; i < list.size(); i++) { dest.add(""); } //拷贝 Collections.copy(dest, list); System.out.println("dest=" + dest); //boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值 //如果list中,有tom 就替换成 汤姆 Collections.replaceAll(list, "tom", "汤姆"); System.out.println("list替换后=" + list); } }
本章作业
第一题
0547_韩顺平Java_集合家庭作业1_哔哩哔哩_bilibili
@SuppressWarnings({"all"}) public class Homework01 { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add(new News("新冠确诊病例超千万,数百万印度教信徒赴恒河\"圣浴\"引民众担忧")); arrayList.add(new News("男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生")); int size = arrayList.size(); for (int i = size - 1; i >= 0; i--) { //System.out.println(arrayList.get(i)); News news = (News)arrayList.get(i); System.out.println(processTitle(news.getTitle())); } } //专门写一个方法,处理现实新闻标题 process处理 public static String processTitle(String title) { if(title == null) { return ""; } if(title.length() > 15) { return title.substring(0, 15) + "..."; //[0,15) } else { return title; } } } /** * 按要求实现: * (1) 封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题; * (2) 只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象: * 新闻一:新冠确诊病例超千万,数百万印度教信徒赴恒河“圣浴”引民众担忧 * 新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生 * (3) 将新闻对象添加到ArrayList集合中,并且进行倒序遍历; * (4) 在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加“…” * (5) 在控制台打印遍历出经过处理的新闻标题; */ class News { private String title; private String content; public News(String title) { this.title = title; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "News{" + "title='" + title + '\'' + '}'; } }
第二题
0548_韩顺平Java_集合家庭作业2_哔哩哔哩_bilibili
package com.hspedu.homework; import java.util.ArrayList; import java.util.Iterator; @SuppressWarnings({"all"}) public class Homework02 { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); Car car = new Car("宝马", 400000); Car car2 = new Car("宾利",5000000); //1.add:添加单个元素 arrayList.add(car); arrayList.add(car2); System.out.println(arrayList); //* 2.remove:删除指定元素 arrayList.remove( car); System.out.println("删除后:" +arrayList); //* 3.contains:查找元素是否存在 System.out.println("查找元素是否存在:"+ arrayList.contains(car));//F //* 4.size:获取元素个数 System.out.println("获取元素个数:"+ arrayList.size());//1 //* 5.isEmpty:判断是否为空 System.out.println("判断是否为空:"+arrayList.isEmpty());//F //* 6.clear:清空 //System.out.println(arrayList.clear();); //* 7.addAll:添加多个元素 System.out.println( "添加多个元素前:"+ arrayList); arrayList.addAll(arrayList);//2个宾利 System.out.println("添加多个元素后:"+ arrayList); //* 8.containsAll:查找多个元素是否都存在 System.out.println("查找多个元素是否都存在:"+arrayList.containsAll(arrayList)); //arrayList.containsAll(arrayList);//T //* 9.removeAll:删除多个元素 //arrayList.removeAll(arrayList); //相当于清空 //* 使用增强for和 迭代器来遍历所有的car , 需要重写 Car 的toString方法 System.out.println("===增强for==="); for (Object o : arrayList) { System.out.println(o);// } System.out.println("===迭代器==="); Iterator iterator = arrayList.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println(next); } } } /** * 使用ArrayList 完成对 对象 Car {name, price} 的各种操作 * 1.add:添加单个元素 * 2.remove:删除指定元素 * 3.contains:查找元素是否存在 * 4.size:获取元素个数 * 5.isEmpty:判断是否为空 * 6.clear:清空 * 7.addAll:添加多个元素 * 8.containsAll:查找多个元素是否都存在 * 9.removeAll:删除多个元素 * 使用增强for和 迭代器来遍历所有的car , 需要重写 Car 的toString方法 */ class Car { private String name; private double price; public Car(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car{" + "name='" + name + '\'' + ", price=" + price + '}'; } }
第三题
0549_韩顺平Java_集合家庭作业3_哔哩哔哩_bilibili
@SuppressWarnings({"all"}) public class Homework03 { public static void main(String[] args) { Map m = new HashMap(); m.put("jack", 650);//int->Integer m.put("tom", 1200);//int->Integer m.put("smith", 2900);//int->Integer System.out.println(m); m.put("jack", 2600);//替换,更新 System.out.println("jack工资更改:"+m); //为所有员工工资加薪100元; //keySet System.out.print("所有员工工资加薪100元:"); Set keySet = m.keySet(); for (Object key : keySet) { //更新 m.put(key, (Integer)m.get(key) + 100); } System.out.println(m); System.out.println("=============遍历============="); //遍历 EntrySet Set entrySet = m.entrySet(); //迭代器 Iterator iterator = entrySet.iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); System.out.println(entry.getKey() + "---" + entry.getValue()); } System.out.println("====遍历所有的工资===="); Collection values = m.values(); for (Object value : values) { System.out.println("工资=" + value); } } } /** * 按要求完成下列任务 * 1)使用HashMap类实例化一个Map类型的对象m,键(String)和值(int)分别用于存储员工的姓名和工资, * 存入数据如下: jack—650元;tom—1200元;smith——2900元; * 2)将jack的工资更改为2600元 * 3)为所有员工工资加薪100元; * 4)遍历集合中所有的员工 * 5)遍历集合中所有的工资 */
第四题:
0550_韩顺平Java_集合家庭作业4_哔哩哔哩_bilibili
调试代码:
@SuppressWarnings({"all"}) public class Homework04 { public static void main(String[] args) { TreeSet treeSet = new TreeSet(); treeSet.add("hsp"); treeSet.add("tom"); treeSet.add("king"); treeSet.add("hsp");//加入不了 System.out.println(treeSet); } }
第五题:
第五题的视频在第四个视频后面:
@SuppressWarnings({"all"}) public class Homework05 { public static void main(String[] args) { TreeSet treeSet = new TreeSet(); //分析源码 //add 方法,因为 TreeSet() 构造器没有传入Comparator接口的匿名内部类 //所以在底层 Comparable<? super K> k = (Comparable<? super K>) key; //即 把 Perosn转成 Comparable类型 treeSet.add(new Person());//ClassCastException. treeSet.add(new Person());//ClassCastException. treeSet.add(new Person());//ClassCastException. treeSet.add(new Person());//ClassCastException. treeSet.add(new Person());//ClassCastException. System.out.println(treeSet); } } class Person implements Comparable{ @Override public int compareTo(Object o) { return 0; } }
第六题:
0551_韩顺平Java_集合家庭作业5_哔哩哔哩_bilibili
package com.hspedu.homework; import java.util.HashSet; import java.util.Objects; @SuppressWarnings({"all"}) public class Homework06 { public static void main(String[] args) { HashSet set = new HashSet();//ok Person p1 = new Person(1001,"AA");//ok Person p2 = new Person(1002,"BB");//ok set.add(p1);//ok set.add(p2);//ok p1.name = "CC"; set.remove(p1);//这里删除不了 System.out.println(set);//2 set.add(new Person(1001,"CC")); System.out.println(set);//3 set.add(new Person(1001,"AA")); System.out.println(set);//4 } } class Person { public String name; public int id; public Person(int id, String name) { this.name = name; this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return id == person.id && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(name, id); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", id=" + id + '}'; } }
第七题:
本章结束