[Java] 13.7. 集合與陣列管理工具

Collections類別與Arrays類別,幫助您快速管理集合與陣列中的物件。

 

image/svg+xml13.7. 集合與陣列管理⼯具 - Collections & Arrays import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); ArrayList l = new ArrayList (); l.add ( e1 ); l.add ( e2 ); l.add ( e3 ); l.add ( e4 ); for ( Object o : l){ Employee e = (Employee)o; System.out.print(e.name + " " ); System.out.println(e. salary ); } } } 執⾏結果 Jack 40000 Eric 45000 Mary 30000 Jack 42000 class Employee extends Person implements Comparable{ String employeeID; int salary; // 略過⼀些程式 public int compareTo ( Object o){ Employee p = (Employee)o; if ( this .salary > p.salary ) return 1 ; if ( this .salary < p.salary ) return - 1 ; return 0 ; } } import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); ArrayList l = new ArrayList (); l.add ( e1 ); l.add ( e2 ); l.add ( e3 ); l.add ( e4 ); Collections.sort ( l ); for ( Object o : l){ Employee e = (Employee)o; System.out.print(e.name + " " ); System.out.println(e. salary ); } } } 執⾏結果 Mary 30000 Jack 40000 Jack 42000 Eric 45000 import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); ArrayList l = new ArrayList (); l.add ( e1 ); l.add ( e2 ); l.add ( e3 ); l.add ( e4 ); Collections.sort ( l ); System.out.println( Collections.binarySearch ( l , e1 )); System.out.println(Collections.binarySearch( l , e2 )); System.out.println(Collections.binarySearch( l , e3 )); System.out.println(Collections.binarySearch( l , e4 )); } } 執⾏結果 1 3 0 2 import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); ArrayList l = new ArrayList (); l.add ( e1 ); l.add ( e2 ); l.add ( e3 ); l.add ( e4 ); Collections.sort ( l ); System.out.println( Collections.binarySearch ( l , e1 )); System.out.println(Collections.binarySearch( l , e2 )); System.out.println(Collections.binarySearch( l , e3 )); System.out.println(Collections.binarySearch( l , e4 )); } } 執⾏結果 1 3 0 2 import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); Employee [] ary = new Employee [ 4 ]; ary [ 0 ] = e1 ; ary [ 1 ] = e2 ; ary [ 2 ] = e3 ; ary [ 3 ] = e4 ; for ( Object o : ary){ Employee e = (Employee)o; System.out.print(e.name + " " ); System.out.println(e. salary ); } } } 執⾏結果 Jack 40000 Eric 45000 Mary 30000 Jack 42000 import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); Employee [] ary = new Employee [ 4 ]; ary [ 0 ] = e1 ; ary [ 1 ] = e2 ; ary [ 2 ] = e3 ; ary [ 3 ] = e4 ; Arrays.sort ( ary ); for ( Object o : ary){ Employee e = (Employee)o; System.out.print(e.name + " " ); System.out.println(e. salary ); } } } 執⾏結果 Mary 30000 Jack 40000 Jack 42000 Eric 45000 import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); Employee [] ary = new Employee [ 4 ]; ary [ 0 ] = e1 ; ary [ 1 ] = e2 ; ary [ 2 ] = e3 ; ary [ 3 ] = e4 ; Arrays.sort ( ary ); System.out.println( Arrays.binarySearch ( ary , e1 )); System.out.println(Arrays.binarySearch(ary, e2)); System.out.println(Arrays.binarySearch(ary, e3)); System.out.println(Arrays.binarySearch(ary, e4)); } } 執⾏結果 1 3 0 2 import java.util.*; class Main{ public static void main( String [] args){ Employee e1 = new Employee( "K12345678" , "Jack" , 20 , " 男⽣ " , "048679" , 40000 ); Employee e2 = new Employee( "K00000000" , "Eric" , 25 , " 男⽣ " , "041121" , 45000 ); Employee e3 = new Employee( "K11111111" , "Mary" , 18 , " 女⽣ " , "050021" , 30000 ); Employee e4 = new Employee( "K22222222" , "Jack" , 19 , " 男⽣ " , "051212" , 42000 ); Employee [] ary = new Employee [ 4 ]; ary [ 0 ] = e1 ; ary [ 1 ] = e2 ; ary [ 2 ] = e3 ; ary [ 3 ] = e4 ; Arrays.sort ( ary ); System.out.println( Arrays.binarySearch ( ary , e1 )); System.out.println(Arrays.binarySearch(ary, e2)); System.out.println(Arrays.binarySearch(ary, e3)); System.out.println(Arrays.binarySearch(ary, e4)); } } 執⾏結果 0 1 -1 -2 J13_7_1 Main.java 1. 建立 4 個員⼯物件,其擁有不同的薪資。 J13_7_2 Main.java 3. 加入 4 個員⼯物件⾄ ArrayList 物件中。 4. 當然取得的資料是不會依照員⼯的薪資來排序的。 要如何才能讓員⼯物件在 List 中也能夠進⾏排序呢? 2. 在這裡建立的是⼀個實作 List 介⾯的類別的物件 ArrayList ,其並沒有提供排序的功能。 2. 使⽤ sort() 進⾏排序。 3. 建立 4 個員⼯物件,其擁有不同的薪資。 5. 加入 4 個⼈員物件。 7. 雖然 List 在透過 add() ⽅法加入員⼯物件時是依照加入的先後順序進⾏排列的。 但在經過 Collections 類別的 sort() ⽅法進⾏排序後,存在於 List 中的員⼯物件將 會重新排序。不同於 PriorityQueue TreeSet 類別的地⽅是, Collections 類別 sort() ⽅法讓 List 集合在可以在需要排序的時候進⾏排序的動作。 4. ArrayList 有實作 List 介⾯,因此可以轉型 List 型別,當然也可以改⽤ LinkedList 6. Collections 類別上的 sort() ⽅法會將 List 中的 員⼯物件進⾏排序;當然, sort() ⽅法是也利⽤員⼯物 件的 Comparable 介⾯的 CompareTo() ⽅法比⼤⼩員⼯ 物件的⼤⼩,然後決定排序的先後順序。 J13_7_3 Main.java 1. 建立 4 個員⼯物件,其擁有不同的薪資。 3. 先將資料進⾏排序。 2. 建立 ArrayList 物件並加入 4 個⼈員物件。 4. Collections 類別上的靜態 binarySearch() ⽅法,第 1 個參數是放要被搜尋的 List 集合。 5. 2 個參數放的是員⼯物件。 表⽰ binarySearch() ⽅法要在 List 集點中搜尋的對象。 6. Collections 類別的 binarySearch() ⽅法會回傳 整數資料,此整數資料即為 List 集合中的索位值,⽤以 表⽰搜尋的員⼯物件正放在 List 集合中的哪⼀個位置。 J13_7_4 Main.java 1. 建立 4 個員⼯物件,其擁有不同的薪資。 3. 不先將 List 中的員⼯物件進⾏排序的動作。 2. 建立 ArrayList 物件並加入 4 個⼈員物件。 6. Collections 類別的 binarySearch() ⽅法會回傳 整數資料,此整數資料即為 List 集合中的索位值,⽤以 表⽰搜尋的員⼯物件正放在 List 集合中的哪⼀個位置。 J13_7_5 Main.java 1. 建立 4 個員⼯物件,其擁有不同的薪資。 2. 在這裡建立是⼀個單純的陣列,並將員⼯物件放入陣列中。 3. 當然取得的資料是不會依照員⼯的薪資來排序的。 要如何才能讓員⼯物件在陣列中也能夠進⾏排序呢? J13_7_6 Main.java 1. 使⽤ sort() 進⾏排序。 1. 注意,員⼯的 compareTo() ⽅法會以薪資進⾏員⼯之間的比⼤⼩。 2. 建立 4 個員⼯物件,其擁有不同的薪資。 3. 在這裡建立是⼀個單純的陣列,並將員⼯物件放入陣列中。 5. 在經過 Arrays 類別的 sort() ⽅法進⾏排序後, 依序取出的員⼯物件會依薪資⼤⼩排列。 4. 靜態的 sort() ⽅法會將陣列中的員⼯物件進⾏排序;當然, sort() ⽅法是利⽤員⼯物件的 Comparable 介⾯的 CompareTo() ⽅法比⼤⼩員⼯物件的⼤⼩,然後決定排序的先後順序。 J13_7_7 Main.java J13_7_8 Main.java 1. 建立 4 個員⼯物件,其擁有不同的薪資。 2. 在這裡建立是⼀個單純的陣列,並將員⼯物件放入陣列中。 6. Arrays 類別的 binarySearch() ⽅法會回傳整 數資料,此整數資料即為陣列中的索位值,⽤以表⽰ 搜尋的員⼯物件正放在陣列中的哪⼀個位置。 3. 透過 sort() ⽅法將員⼯物件依薪資⼤⼩排序。 4. 靜態的 BinarySearch() ⽅法, 1 個參數是放要被搜尋的陣列。 5. 2 個參數放的是員⼯物 件。表⽰ binarySearch() ⽅法要在陣列中搜尋的對象。 1. 建立 4 個員⼯物件,其擁有不同的薪資。 2. 在這裡建立是⼀個單純的陣列,並將員⼯物件放入陣列中。 4. binarySearch() ⽅法傳回的索引位置,竟然有 負數?沒錯,這是在沒有進⾏排序下搜尋資料的結果。 3. 若不使⽤ sort() ⽅法將員⼯物件排序。 裝在 List 中的員⼯物件,是不是也可以排列呢? J13_7_2 Employee.java Collections 類別的 sort() ⽅法,可排序 List 中的員⼯物件 binarySearch() ⽅法也可以幫我們搜尋 特定的員⼯物件 1 1 注意,沒有排序過的 List 是不可以進⾏搜尋的 1 1 裝在陣列中的員⼯物件,是不是也可以排列呢? 1 1 Arrays 也有 sort() ⽅法可以將陣列中的 員⼯物件作排序 1 1 Arrays binarySearch() 可以幫我們在陣列中 搜尋特定員⼯物件 同樣的,沒有排序過的陣列是不可以進⾏搜尋的 1 1

留言