黑馬程式員——Java基礎---集合架構工具類

來源:互聯網
上載者:User

標籤:

黑馬程式員——Java基礎<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------ 

 

一、概述

  Java為操作Set、List和Map提供了一系列工具類,主要有Collections和Arrays。這兩個工具類的特點:類中的方法都是靜態,不需要建立對象,直接使用類名調用即可。Collections:是集合對象的工具類,提供了操作集合的工具方法;Arrays:是數組的工具類,提供了對數組的工具方法。
    當把數群組轉換成集合後,可以用集合的方法來操作集合,但是某些改變集合長度發方法不可以用,因為數組是固定長度的。
    當數組中的元素是引用資料類型時,變成集合後,就將數組中的元素作為集合中的元素存在。
    當數組中的元素是基礎資料型別 (Elementary Data Type)時,變成集合後,會將這個數組變成集合中的元素。

 

一、本文

1Collections工具類

  在Collections工具類中很多方法是用於對List集合進行操作的,如比較,尋找,隨機排序等,下面是常用的方法:

1.尋找:      T max(Collection<? extends T> coll)     根據集合的自然順序,擷取coll集合中的最大元素       T max(Collection<? extends T> coll,Comparator<? super T> comp)    根據指定比較子comp的順序,擷取coll集合中的最大元素      Int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey)   二分法搜尋list集合中的指定對象2.替換:      void fill(List<? super T> list, T obj)    將list集合中的全部元素替換成指定對象obj boolean replaceAll(List<T> lsit,T oldVal,T newVal)     使用newVal替換list集合中的oldVal值3.反轉 reverse(List<?> list)    反轉list集合中元素的順序     Comparator reverseOrder()   返回一個比較子,強行逆轉了實現Comparable介面的對象的自然順序     Comparator reverseOrder(Comparator<T> cmp)   返回一個比較子,強行逆轉了指定比較子的順序4.排序:     void shuffle(List<?> list)    使用預設隨機源對list集合中的元素進行隨機排序     void sort(Lsit<T> list)    根據自然順序對list集合中的元素進行排序      void sort(List<T> lsit,Comparator<? super T> c)    根據指定比較子c的排序方式對list集合進行排序

  下面是一段練習代碼:

public class User { //此處無需實現Comparable介面    private String name;    private Integer order;    public String getName() {        return name;    }
public void setName(String name) { this.name = name; }
public Integer getOrder() { return order; }
public void setOrder(Integer order) { this.order = order; }} 主類中這樣寫即可:public class Test{ public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<User> list = new ArrayList<User>(); list.add(user2); list.add(user1);
Collections.sort(list,new Comparator<User>(){ public int compare(User arg0, User arg1) { return arg0.getOrder().compareTo(arg1.getOrder()); } });    for(User u : list){   System.out.println(u.getName()); } }}

  上面程式示範了如何用Collections的Sort對List的排序方法。

 

2Arrays工具類

      java.util.Arrays類能方便地運算元組,它提供的所有方法都是靜態。具有以下功能:

1.給數組賦值:通過fill方法。

2.對數組排序:通過sort方法,按升序。

3.比較數組:通過equals方法比較數組中元素值是否相等。

4.尋找數組元素:通過binarySearch方法能對排序好的數組進行二分尋找法操作。

下面是常用方法的具體應用代碼:

public class TestArrays {


       public static void output(int[] array) {

              if (array!=null) {

              for (int i = 0; i < array.length; i++) {

                     System.out.print(array[i]+" ");

              }

}

             System.out.println();

}


       public static void main(String[] args) {

              int[] array = new int[5];

              //填充數組

              Arrays.fill(array, 5);

              System.out.println("填充數組:Arrays.fill(array, 5):");

              TestArrays.output(array);     

 

              //將數組的第2和第3個元素賦值為8

              Arrays.fill(array, 2, 4, 8);

            System.out.println("將數組的第2和第3個元素賦值為8:Arrays.fill(array, 2, 4, 8):");

              TestArrays.output(array);

              int[] array1 = {7,8,3,2,12,6,3,5,4};


              //對數組的第2個到第6個進行排序進行排序

              Arrays.sort(array1,2,7);

              System.out.println("對數組的第2個到第6個元素進行排序進行排序:Arrays.sort(array,2,7):");

              TestArrays.output(array1);


              //對整個數組進行排序

              Arrays.sort(array1);

              System.out.println("對整個數組進行排序:Arrays.sort(array1):");

              TestArrays.output(array1);


              //比較數組元素是否相等

              System.out.println("比較數組元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));

              int[] array2 = array1.clone();

              System.out.println("複製後數組元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));


              //使用二分搜尋演算法尋找指定元素所在的下標(必須是排序好的,否則結果不正確)

              Arrays.sort(array1);

              System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));

             //如果不存在就返回負數

             System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));

}

}

  注意:將數群組轉換成集合,不可使用集合的增刪方法,因為數組的長度是固定的,如果進行增刪操作,則會產生UnsupportedOperationException的編譯異常。

 

3jdk1.5新特性

  Collection有一個父介面Iterable,該介面封裝了iterator方法,並提供了一個增強型的for迴圈,具體格式如下:

for(元素類型 變數 :數組或者Collection集合){}

  增強for迴圈和傳統for迴圈區別:增強for迴圈,使用時,必須要有被遍曆的目標,而且只能遍曆數組和Collection集合,簡化了迭代;傳統for迴圈,使用更加普遍。

  注意:遍曆數組還是使用傳統for迴圈,這樣可以通過指標對數組中的元素進行操作

  可變參數是指定資料類型的後面加上三個點,其實就是一個數群組類型的參數,以前定義一個int[]類型 參數,調用必須要定義好一個數組,再往裡傳遞。而現在定義一個int…類型的參數,調用者,直接往該函數裡傳遞元素即可,在運行時,自動會將這些實際參數封裝到一個該類型的數組中。

  注意:如果函數上有多個參數,可變參數一定要定義在參數列表最後邊,否則編譯失敗

 

三、總結

  本文介紹了集合架構的兩個工具類,以及jdk1.5的兩個新特性。簡單的講述了Collections和Arrays基本的使用方法,其中Collections寫了一個簡單的用sort排序的執行個體。

黑馬程式員——Java基礎---集合架構工具類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.