在實際的 Java 開發中,如何選擇數據結構是一個非常重要的問題。
衡量標准化(讀的效率與改的效率) :
① Array: 讀快改慢
② Linked :改快讀慢
③ Hash:介於兩者之間
實現List、Set和數組之間轉換的關鍵點如下:(一定要注意泛型的引用)
1. List轉換成數組可以使用List的toArray方法,返回一個Object數組;
2. Set轉換成數組可以使用Set的toArray方法,返回一個Object數組;
3. 如果List或Set中元素的類型都為A,那么可以使用帶參數的toArray方法,得到類型為A的數組,具體語句是“(A[])set.toArray(new A[0])”;
4. 數組轉換成List可以使用Arrays的asList靜態方法,得到一個List;
5. 數組轉化成Set時,需要先將數組轉化成List再用List構造Set;
Demo_1:List 轉數組
import java.util.*;
public class Test {
public static void print(Double arr[]) {
for (int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
ArrayList<Double> list = new ArrayList<Double>();
// 若不寫成泛型(<Double>)的方式,則下面: Double arr3[] = list.toArray(new Double[0]);
// 要改寫成:Double arr3[] = (Double[])list.toArray(new Double[0]);
list.add(1.23);
list.add(4.57);
list.add(2.38);
list.add(4.598);
int size = list.size();
System.out.println(size); // 輸出:4
// 第一種方法,不推薦
Double arr1[] = new Double[size];
for(int i=0;i<size;i++){
arr1[i]=(double)list.get(i);
}
print(arr1); // 輸出:1.23 4.57 2.38 4.598
// 第二種方法,推薦
// 當list中的數據類型都一致時可以將list轉化為數組
Object arr2[] = list.toArray();
System.out.println("從list轉換成的對象數組長度為:" + arr2.length); // 輸出:從list轉換成的對象數組長度為:4
// 在轉化為其它類型的數組時需要強制類型轉換,並且,要使用帶參數的toArray方法,參數為對象數組.
// 將list中的內容放入參數數組中,當參數數組的長度小於list的元素個數時,會自動擴充數組的長度以適應list的長度
Double arr3[] = list.toArray(new Double[0]);
System.out.println("從list轉換成的字符串數組長度為:" + arr3.length); // 輸出:從list轉換成的字符串數組長度為:4
print(arr3); // 輸出:1.23 4.57 2.38 4.598
// 分配一個長度與list的長度相等的字符串數組
Double[] arr4 = list.toArray(new Double[list.size()]);
System.out.println("從list轉換成的字符串數組長度為:" + arr4.length); // 輸出:從list轉換成的字符串數組長度為:4
print(arr4); // 輸出: 1.23 4.57 2.38 4.598
}
}
Demo_2:數組轉 List
import java.util.*;
public class Test {
public static void main(String[] args) {
List<Double> list = new ArrayList<Double>();
list.add(1.23);
list.add(4.57);
list.add(2.38);
list.add(4.598);
System.out.println(list); // 輸出:[1.23, 4.57, 2.38, 4.598]
list.clear();
System.out.println(list.size()); // 輸出:0
// 直接使用Arrays的asList方法
Double arr[] = {1.23,4.57,2.38,4.598};
list = Arrays.asList(arr);
System.out.println("將數組轉換成list的元素個數為:" + list.size()); // 輸出:將數組轉換成list的元素個數為:4
System.out.println(list); // 輸出:[1.23, 4.57, 2.38, 4.598]
}
}
Demo_3:set 轉數組
import java.util.*;
public class Test {
public static void print(Double arr[]) {
for (int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
HashSet<Double> set = new HashSet<Double>();
// 若不寫成泛型(<Double>)的方式,則下面: Double arr3[] = set.toArray(new Double[0]);
// 要改寫成:Double arr3[] = (Double[])set.toArray(new Double[0]);
set.add(1.23);
set.add(4.57);
set.add(2.38);
set.add(4.598);
int size = set.size();
System.out.println(size); // 輸出:4
// 第一種方法,不推薦
Double arr[] = new Double[size];
Iterator<Double> i = set.iterator();
// 若寫成 Iterator i = set.iterator(),則下面要寫成 arr[j] = (Double) i.next();
int j =0;
while(i.hasNext()){
arr[j] = i.next();
j++;
}
print(arr); // 輸出:4.598 2.38 1.23 4.57
// 第二種方法,推薦
// 當set中的數據類型都一致時可以將set轉化為數組
Object arr1[] = set.toArray();
System.out.println("從set轉換成的對象數組長度為:" + arr1.length); // 輸出:從set轉換成的對象數組長度為:4
// 在轉化為其它類型的數組時需要強制類型轉換,並且,要使用帶參數的toArray方法,參數為對象數組.
// 將set中的內容放入參數數組中,當參數數組的長度小於set的元素個數時,會自動擴充數組的長度以適應list的長度
Double arr2[] = set.toArray(new Double[0]);
System.out.println("從set轉換成的Double數組長度為:" + arr2.length); // 輸出:從list轉換成的字符串數組長度為:4
print(arr2); // 輸出:4.598 2.38 1.23 4.57
// 分配一個長度與list的長度相等的字符串數組
Double[] arr3 = set.toArray(new Double[set.size()]);
System.out.println("從set轉換成的字符串數組長度為:" + arr3.length); // 輸出:從list轉換成的字符串數組長度為:4
print(arr3); // 輸出: 4.598 2.38 1.23 4.57
}
}
Demo_4:數組轉 set
import java.util.*;
public class Test {
public static void main(String[] args) {
HashSet<Double> set = new HashSet<Double>();
set.add(1.23);
set.add(4.57);
set.add(2.38);
set.add(4.598);
System.out.println(set); // 輸出:[4.598, 2.38, 1.23, 4.57]
set.clear();
System.out.println(set.size()); // 輸出:0
Double arr[] = {1.23,4.57,2.38,4.598};
// 間接使用Arrays的asList方法,將數組轉換成List后,再用List構造Set
set = new HashSet<Double>(Arrays.asList(arr));
System.out.println("將數組轉換成set的元素個數為:" + set.size()); // 輸出:將數組轉換成set的元素個數為:4
System.out.println(set); // 輸出:[4.598, 2.38, 1.23, 4.57]
}
}
