標籤:
黑馬程式員——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)時,變成集合後,會將這個數組變成集合中的元素。
一、本文
1、Collections工具類
在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的排序方法。
2、Arrays工具類
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的編譯異常。
3、jdk1.5新特性
Collection有一個父介面Iterable,該介面封裝了iterator方法,並提供了一個增強型的for迴圈,具體格式如下:
for(元素類型 變數 :數組或者Collection集合){}
增強for迴圈和傳統for迴圈區別:增強for迴圈,使用時,必須要有被遍曆的目標,而且只能遍曆數組和Collection集合,簡化了迭代;傳統for迴圈,使用更加普遍。
注意:遍曆數組還是使用傳統for迴圈,這樣可以通過指標對數組中的元素進行操作
可變參數是指定資料類型的後面加上三個點,其實就是一個數群組類型的參數,以前定義一個int[]類型 參數,調用必須要定義好一個數組,再往裡傳遞。而現在定義一個int…類型的參數,調用者,直接往該函數裡傳遞元素即可,在運行時,自動會將這些實際參數封裝到一個該類型的數組中。
注意:如果函數上有多個參數,可變參數一定要定義在參數列表最後邊,否則編譯失敗
三、總結
本文介紹了集合架構的兩個工具類,以及jdk1.5的兩個新特性。簡單的講述了Collections和Arrays基本的使用方法,其中Collections寫了一個簡單的用sort排序的執行個體。
黑馬程式員——Java基礎---集合架構工具類