天天看點

JAVA學習筆記 day1簡介

今日學習内容:Collections工具類

Collections工具類

  • 簡介
    • 常用方法以及代碼展示
      • 可變參數

簡介

是集合的工具類,主要用來對單列集合進行操作。

常用方法以及代碼展示

public static void shuffle(List<?>list)
//打亂集合順序,傳入的參數必須是List接口類型(如List<> list=new ArrayList<>() 實質是多态,父類指向子類對象),也可以直接是List的實作類對象(如:ArrayList<> list=new ArrayList<>())
           
public static<t> void sort(List<t>list)
//将集合中的元素按照預設規則排序,傳入的參數必須是List接口類型(如List<> list=new ArrayList<>() 實質是多态,父類指向子類對象),也可以直接是List的實作類對象(如:ArrayList<> list=new ArrayList<>())
           
public static<t> void sort(List<t>list,Comparator<? super T>)
//将集合中的元素按照指定規則排序,Comparator是一個比較器,用來指定排序規則的。
           

代碼部分:

List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        System.out.println(list); //[1, 2, 3, 4]
//建立一個集合,随後添加元素,然後列印,結果如上。
//補充,可以直接列印的原因是List裡面重寫了toString()方法,是以列印的并不是位址值。        
           
//打亂集合元素
        Collections.shuffle(list);
        System.out.println(list);//[2, 1, 3, 4]
           
//集合元素按照預設規則進行排序
        Collections.sort(list);
        System.out.println(list);//[1, 2, 3, 4]
           

預設排序規則:要求集合元素所屬的類必須實作Comparable接口,并且重寫compareTo方法,在方法中寫好排序的規則。Integer類中是按照升序進行排列。

下面舉例集合元素為自定義類:

//集合元素為自定義類并且重寫了toString方法
       public class person {
    String name;
    int age;

    public person() {
    }

    public person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

           
List<person> list = new ArrayList<>();
        person p1=new person("hjh",18);
        person p2=new person("zyj",28);
        person p3=new person("yj",24);
        person p4=new person("wzyj",22);
        person p5=new person("zrfyj",32);
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);
        System.out.println(list);//[person{name='hjh', age=18}, person{name='zyj', age=28}, person{name='yj', age=24}, person{name='wzyj', age=22}, person{name='zrfyj', age=32}]
           

此時若想用Collections.sort()方法對list進行排序,會出現錯誤,因為person類并沒有實作comparable接口和重寫compareTo方法

JAVA學習筆記 day1簡介

此時試試person類實作接口并重寫方法

public class person implements  Comparable{
    String name;
    int age;

    public person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        //在這裡指定排序規則
        //前(第一個參數)-後(第二個參數):升序
        //後(第二個參數)-前(第一個參數):降序
        //前一般指調用這個方法的對象,可以用this來表示。後也就是參數中的o
        person o2=(person)o;
        return o2.age-this.age;
    }
}
           

下面是測試結果:

public class test1 {
    public static void main(String[] args) {
        List<person> list = new ArrayList<>();
        person p1=new person("hjh",18);
        person p2=new person("zyj",28);
        person p3=new person("yj",24);
        person p4=new person("wzyj",22);
        person p5=new person("zrfyj",32);
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);
        System.out.println(list);//按照輸入順序輸出的:[person{name='hjh', age=18}, person{name='zyj', age=28}, person{name='yj', age=24}, person{name='wzyj', age=22}, person{name='zrfyj', age=32}]
        Collections.sort(list);
        System.out.println(list);//按照年齡降序排列的。[person{name='zrfyj', age=32}, person{name='zyj', age=28}, person{name='yj', age=24}, person{name='wzyj', age=22}, person{name='hjh', age=18}]
    }
}
           

可變參數

引子:

//定義一個方法,需要接收五個int類型的參數(比較繁瑣)
    public static void method1(int num1,int num2,int num3,int num4,int num5){
    }
           

想到了解決方法

//參數是一個int類型的數組,需要提前将int數值傳到數組中。
publi static void method(int[] arr){}
           

上述兩種方法隻能 分别接收多個資料 或者 隻能接收數組,都不夠好,是以有了可變參數,下面是定義。

如果定義一個方法,需要接收多個參數,如果參數類型一緻,我們可以使用可變參數對其簡化。

格式:

修飾符 傳回值類型 方法名(資料類型…變量名)

代碼:

//定義一個方法,需要接收五個int類型的參數
    public static void method3(int...nums){}
           

此處既可以傳入多個參數,也可以直接穿入一個提前存好資料的數組.此處的nums就當成數組使用,通過索引取出資料。

注意事項:

一個方法隻能有一個可變參數;

如果方法有多個參數,可變參數要放到最後

應用場景:

在Collections中也提供了一個往集合中添加一些元素的方法:

==public static boolean addAll(Collectionc,T…elements)

代碼:

ArrayList<String> numbers = new ArrayList<>();
        Collections.addAll(numbers, "2", "A", "K");
        System.out.println(numbers);//[2, A, K]