笑話類網(wǎng)站用什么做網(wǎng)絡(luò)運(yùn)營(yíng)怎么做
"我已不在地壇,地壇在我"
????????? ? ? ? ? ? ? ? ?—— 《想念地壇》 24.5.28
一、Collections集合工具類
1.概述:集合工具類
2.特點(diǎn):
????????a.構(gòu)造私有
????????b.方法都是靜態(tài)的3.使用:類名直接調(diào)用
4.方法:
????????static <T> boolean addAll(collection<? super T>c,T... elements) —> 批量添加元素
????????static void shuffle(List<?> list) —> 將集合中的元素順序打亂
????????static <T> void sort(List<T> list) —> 將集合中的元素按照默認(rèn)規(guī)則排序
????????static <T> void sort(List<T> list,comparator<? super T> c) —> 將集合中的元素按照指定規(guī)則排序5.Comparator比較器
a.方法:
????????int compare(T ol,T o2)
? ? ? ? ? ? ? ? o1-o2 ->升序
? ? ? ? ? ? ? ? o2-o1 -> 降序????package S84Collections;public class Person {private String name;private Integer age;public Person() {}public Person(Integer age, String name) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';} }
package S84Collections;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;public class Demo233Collections2 {public static void main(String[] args) {ArrayList<Person> list = new ArrayList<>();list.add(new Person(18,"小明"));list.add(new Person(19,"小紅"));list.add(new Person(17,"小剛"));Collections.sort(list, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {// 按年齡排序return o1.getAge()-o2.getAge();}});} }
compareTo提前定義好排序規(guī)則
package S84Collections;public class Student implements Comparable<Student>{private String name;private Integer score;public Student() {}public Student(String name, Integer score) {this.name = name;this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", score=" + score +'}';}@Overridepublic int compareTo(Student o) {return this.getScore()-o.getScore();} }
package S84Collections;import java.util.ArrayList; import java.util.Collections;public class Demo234ArraysAsList {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();list.add(new Student("小明",100));list.add(new Student("小紅",98));list.add(new Student("小剛",75));Collections.sort(list); // Student提前決定排序規(guī)則System.out.println(list); // [Student{name='小剛', score=75}, Student{name='小紅', score=98}, Student{name='小明', score=100}]} }
6.Arrays中的靜態(tài)方法:
????????static <T> List<T> asList(T...a) —> 直接指定元素,轉(zhuǎn)存到list集合中
????????public static void main(string[] args){
????????????????List<string> list = Arrays.asList("張三","李四”,"王五”);
????????????????System.out.printin(list):
? ? ? ? }
package S84Collections;import java.lang.reflect.Array; import java.util.Arrays; import java.util.List;public class Demo235ArraysAsList {public static void main(String[] args) {// static <T> List<T> asList(T...a) —> 直接指定元素,轉(zhuǎn)存到list集合中// public static void main(string[] args){// List<string> list = Arrays.asList("張三","李四”,"王五”);// System.out.printin(list):// }List<String> list = Arrays.asList("張三","李四","王五");System.out.println(list);} }
二、泛型 E/T/V/R
1.為什么要使用泛型?
? ? ? ? ① 從使用層面上說(shuō):
????????????????統(tǒng)一數(shù)據(jù)類型,防止將來(lái)的數(shù)據(jù)類型轉(zhuǎn)換異常
? ? ? ? ② 從定義層面來(lái)看:
????????????????定義帶泛型的類、方法等,將來(lái)使用的時(shí)候給泛型確定什么類型,泛型就會(huì)變成什么類型,凡是涉及到泛型的都會(huì)變成確定的類型,代碼更加靈活
import java.util.ArrayList;public class Demo236Genericity1 {public static void main(String[] args) {ArrayList<Object> list = new ArrayList<>();list.add("hello");list.add("world");list.add(1);list.add(2.5);list.add(true);// 獲取元素中為String類型的字符串長(zhǎng)度f(wàn)or (Object o : list) {String s = (String) o;System.out.println(s.length());}} }
2.什么時(shí)候確定類型
????????new對(duì)象的時(shí)候確定類型
3.含有泛型的類
package S85Genericity;import java.util.Arrays;public class MyArrayList <E>{// 定義一個(gè)數(shù)組,充當(dāng)ArrayList底層的數(shù)組,長(zhǎng)度直接規(guī)定為10Object[] obj = new Object[10];// 定義size,代表集合元素個(gè)數(shù)int size;// 定義一個(gè)add方法,參數(shù)類型需要和泛型類型保持一致,數(shù)據(jù)類型為E,變量名隨意public boolean add(E e){obj[size] = e;size++;return true;}// 定義一個(gè)get方法。根據(jù)索引獲取元素public E get(int index){return (E) obj[index];}@Overridepublic String toString() {return Arrays.toString(obj);} }
package S85Genericity;public class Demo238Test {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("一切都會(huì)好的");list.add("我一直相信");System.out.println(list); // 直接輸出對(duì)象名,默認(rèn)調(diào)用toString// [一切都會(huì)好的, 我一直相信, null, null, null, null, null, null, null, null]System.out.println("————————————————————————");MyArrayList<Integer> list1 = new MyArrayList<>();list1.add(1);list1.add(2);list1.add(3);System.out.println(list1);// [1, 2, 3, null, null, null, null, null, null, null]Integer ele = list1.get(1);System.out.println(ele); // 2} }
4.含有泛型的方法
① 格式:
????????修飾符 <E> 返回值類型 方法名(E e)
② 什么時(shí)候確定類型
????????調(diào)用的時(shí)候確定類型
③ 示例
import java.util.ArrayList;public class ListUtils {// 定義一個(gè)靜態(tài)方法addAll,添加多個(gè)集合的元素// 可變參數(shù): E...e 可變參類型// E是聲明不是返回值類型,還要另外傳參數(shù)類型public static <E> void addAll(ArrayList<E> list,E ...e){// 遍歷數(shù)組for (E element : e) {list.add(element);}} }
public class Demo238Test {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("一切都會(huì)好的");list.add("我一直相信");System.out.println(list); // 直接輸出對(duì)象名,默認(rèn)調(diào)用toString// [一切都會(huì)好的, 我一直相信, null, null, null, null, null, null, null, null]System.out.println("————————————————————————");MyArrayList<Integer> list1 = new MyArrayList<>();list1.add(1);list1.add(2);list1.add(3);System.out.println(list1);// [1, 2, 3, null, null, null, null, null, null, null]Integer ele = list1.get(1);System.out.println(ele); // 2} }
5.含有泛型的接口
① 格式:
????????public interface 接口名<E>{
????????
????????}
② 什么時(shí)候確定類型:
????????a.在實(shí)現(xiàn)類的時(shí)候還沒(méi)有確定類型,只能在new實(shí)現(xiàn)類的時(shí)候確定類型了 —> ArrayList
????????b.在實(shí)現(xiàn)類的時(shí)候百接確定類型了 —> 比如Scanner
③ 示例
????????接口
package S85Genericity;public interface MyList <E>{public boolean add(E e); }
package S85Genericity;import java.util.Arrays;public class MyArrayList1<E> implements MyList<E>{// 定義一個(gè)數(shù)組,充當(dāng)ArrayList底層的數(shù)組,長(zhǎng)度直接規(guī)定為10Object[] obj = new Object[10];// 定義size,代表集合元素個(gè)數(shù)int size;// 定義一個(gè)add方法,參數(shù)類型需要和泛型類型保持一致,數(shù)據(jù)類型為E,變量名隨意public boolean add(E e){obj[size] = e;size++;return true;}// 定義一個(gè)get方法。根據(jù)索引獲取元素public E get(int index){return (E) obj[index];}@Overridepublic String toString() {return Arrays.toString(obj);} }
package S85Genericity;public class Demo239MyListTest {public static void main(String[] args) {MyArrayList<String> list1 = new MyArrayList<>();list1.add("nov 新的");list1.add("port 站點(diǎn)");list1.add("trans 轉(zhuǎn)變");list1.add("fer 拿");list1.add("cover 覆蓋 表面");list1.add("fess 說(shuō) 講");list1.add("view 看作 視作");list1.add("mean 意思 包含");list1.add("con 一起");list1.add("age 年齡 年代 作名詞");System.out.println(list1);System.out.println(list1.get(0));} }
6.泛型的上限下限
????????1.作用:可以規(guī)定泛型的范圍
????????2.上限:
????????????????a.格式:<? extends 類型>
????????????????b.含義:?只能接收extends后面的本類類型以及子類類型????????3.下限:
????????????????a.格式:<? super 類型>
????????????????b.含義:?只能接收super后面的本類類型以及父類類型7.應(yīng)用場(chǎng)景:
????????1.如果我們?cè)诙x類,方法,接口的時(shí)候,如果類型不確定,我們可以考慮定義含有泛型的類、方法、接口
????????2.如果類型不確定,但是能知道以后只能傳遞某個(gè)類的繼承體系中的子類或者父類,就可以使用泛型的通配符
package S85Genericity;import java.util.ArrayList; import java.util.Collection;/*Integer ——> number ——> objectString ——> Object*/ public class Demo240Genericity4 {public static void main(String[] args) {ArrayList<Integer> list1 = new ArrayList<>();ArrayList<String> list2 = new ArrayList<>();ArrayList<Number> list3 = new ArrayList<>();ArrayList<Object> list4 = new ArrayList<>();get1(list1);// get1(list2); 錯(cuò)誤get1(list3);// get1(list4); wojA\System.out.println();// get2((list1)); 錯(cuò)誤// get2(list2);get2(list3);get2(list4);}// 上限 ? 只能接受extends后面的本類類型以及子類類型public static void get1(Collection<? extends Number> collection){}// 下限 ? 只能接收super后面的技術(shù)類型以及父類類型public static void get2(Collection<? super Number> collection){}// 應(yīng)用場(chǎng)景: //1.如果我們?cè)诙x類,方法,接口的時(shí)候,如果類型不確定,我們可以考慮定義含有泛型的類,方法,接口 // 2.如果類型不確定,但是能知道以后只能傳遞某個(gè)類的繼承體系中的子類或者父類,就可以使用泛型的通配符}