ArrayList就是傳說中的動態數組,用MSDN中的說法,就是Array的複雜版本,它提供了以下一些好處:java
你們知道,數組是靜態的,數組被初始化以後,數組長度就不能再改變了。ArrayList是能夠動態改變大小的。那麼,何時使用Array(數組),何時使用ArrayList?答案是:當咱們不知道到底有多少個數據元素的時候,就可以使用ArrayList;若是知道數據集合有多少個元素,就用數組。數組
Arraylist()
這個構造方法構造了一個空的鏈表。ArrayList(Collection<? extends E> c)
這個構造方法構造了一個包含指定元素集合的鏈表,注意,這裏的字符E是一個標記,用來表示集合中元素的類型。至於具體是什麼類型,須要你在使用這個構造方法的時候來指定。ArrayList(int initialCapacity)
這是第三個構造方法,構造了一個指定大小但內容爲空的鏈表。initialCapacity參數就是初始容量大小。舉例來講,若是你要建立一個空的數組鏈表,用來存放String類型的對象,那麼你能夠像下面這樣作:oop
ArrayList<String> list = new ArrayList<String>();spa
若是你須要建立一個指定初始容量的數組鏈表,你能夠像下面這樣作:code
ArrayList<Integer> list = new ArrayList<Integer>(7);對象
注意:ArrayList類只支持對象類型,不支持 基礎數據類型。就是說ArrayList對象只能存放對象,不能存放基礎數據類型的數據。blog
方式一:
ArrayList<String> list = new ArrayList<String>();
String str01 = String("str01");
String str02 = String("str02");
list.add(str01);
list.add(str02);
方式二:
ArrayList<String> list = new ArrayList<String>(){{add("str01"); add("str02");}}; 排序
下面是總結了一些比較經常使用的ArrayList類成員方法:索引
boolean add(Element e)
void add(int index, Element e)
void clear()
E remove(int index)
protected void removeRange(int start, int end)
E get(int index)
Object[] toArray()
E set(int index, E element)
boolean contains(Object o)
int indexOf(Object o)
int lastIndexOf(Object o)
boolean isEmpty()
int size()
1 import java.util.*; 2
3 public class ArrayListExamples { 4
5 public static void main(String args[]) { 6 // 建立一個空的數組鏈表對象list,list用來存放String類型的數據
7 ArrayList<String> list = new ArrayList<String>(); 8
9 // 增長元素到list對象中
10 list.add("Item1"); 11 list.add("Item2"); 12 list.add(2, "Item3"); // 此條語句將會把「Item3」字符串增長到list的第3個位置。
13 list.add("Item4"); 14
15 // 顯示數組鏈表中的內容
16 System.out.println("The arraylist contains the following elements: "
17 + list); 18
19 // 檢查元素的位置
20 int pos = list.indexOf("Item2"); 21 System.out.println("The index of Item2 is: " + pos); 22
23 // 檢查數組鏈表是否爲空
24 boolean check = list.isEmpty(); 25 System.out.println("Checking if the arraylist is empty: " + check); 26
27 // 獲取鏈表的大小
28 int size = list.size(); 29 System.out.println("The size of the list is: " + size); 30
31 // 檢查數組鏈表中是否包含某元素
32 boolean element = list.contains("Item5"); 33 System.out 34 .println("Checking if the arraylist contains the object Item5: "
35 + element); 36
37 // 獲取指定位置上的元素
38 String item = list.get(0); 39 System.out.println("The item is the index 0 is: " + item); 40
41 // 遍歷arraylist中的元素 42
43 // 第1種方法: 循環使用元素的索引和鏈表的大小
44 System.out 45 .println("Retrieving items with loop using index and size list"); 46 for (int i = 0; i < list.size(); i++) { 47 System.out.println("Index: " + i + " - Item: " + list.get(i)); 48 } 49
50 // 第2種方法:使用foreach循環
51 System.out.println("Retrieving items using foreach loop"); 52 for (String str : list) { 53 System.out.println("Item is: " + str); 54 } 55
56 // 第三種方法:使用迭代器 57 // hasNext(): 返回true表示鏈表鏈表中還有元素 58 // next(): 返回下一個元素
59 System.out.println("Retrieving items using iterator"); 60 for (Iterator<String> it = list.iterator(); it.hasNext();) { 61 System.out.println("Item is: " + it.next()); 62 } 63
64 // 替換元素
65 list.set(1, "NewItem"); 66 System.out.println("The arraylist after the replacement is: " + list); 67
68 // 移除元素 69 // 移除第0個位置上的元素
70 list.remove(0); 71
72 // 移除第一次找到的 "Item3"元素
73 list.remove("Item3"); 74
75 System.out.println("The final contents of the arraylist are: " + list); 76
77 // 轉換 ArrayList 爲 Array
78 String[] simpleArray = list.toArray(new String[list.size()]); 79 System.out.println("The array created after the conversion of our arraylist is: "
80 + Arrays.toString(simpleArray)); 81 } 82 }
輸出:接口
The arraylist contains the following elements: [Item1, Item2, Item3, Item4]
The index of Item2 is: 1
Checking if the arraylist is empty: false
The size of the list is: 4
Checking if the arraylist contains the object Item5: false
The item is the index 0 is: Item1
Retrieving items with loop using index and size list
Index: 0 - Item: Item1
Index: 1 - Item: Item2
Index: 2 - Item: Item3
Index: 3 - Item: Item4
Retrieving items using foreach loop
Item is: Item1
Item is: Item2
Item is: Item3
Item is: Item4
Retrieving items using iterator
Item is: Item1
Item is: Item2
Item is: Item3
Item is: Item4
The arraylist after the replacement is: [Item1, NewItem, Item3, Item4]
The final contents of the arraylist are: [NewItem, Item4]
The array created after the conversion of our arraylist is: [NewItem, Item4]
這道題就是我去查去總結ArrayList類的初衷了。這道題一看以爲很簡單,把給出N個正數輸入到數組裏,排序找到最小的兩個,求和,刪掉最小的兩個加入新求和得出的數字。重複過程便可。
我以前沒有用過ArrayList類因此就在準備建數組想辦法寫排序,寫了一會沒寫出來就不想寫了把這道題放下了。後來問了同窗,說用ArrayList作 collections.sort 排序。跟他要了代碼看就會了這個題。可是感受這個類還挺重要的吧就上網查了一些詳解、使用方法,綜合了許多博主的文章,寫了這個 我以爲是目前本身用起來足夠了的詳解。
ps:吐槽一下博客園真的是比csdn看起來舒服不少啊,雖然博客皮膚不少都不一樣可是真的右下角沒廣告這一點就比再怎麼整齊劃一的博客好看多了啊。另外真的一樣一篇文章我看了至少8+不一樣博主的博文(沒有聲明轉載之類的,我看到最先的一篇是04年的以後重複的文章不少)因此,在這裏我要聲明一下,非原創,僅爲我的綜合不一樣博主的博文加上本身的理解研究綜合而來,不妥侵刪。(裝做本身是個正經兒博主)
下面就是代碼:
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Scanner; 4
5 public class 哈夫曼樹 { 6 static Scanner sc = new Scanner(System.in); 7 public static void main(String[] args) { 8 int m,sum=0; 9 int n = sc.nextInt(); 10 ArrayList<Integer> num = new ArrayList<Integer>(); 11 for (int i=0;i<n;i++){ 12 num.add(sc.nextInt()); 13 } 14 while(n>1){ 15 Collections.sort(num); 16 m=num.get(0)+num.get(1); 17 sum = sum+m; 18 num.remove(0); 19 num.remove(0); 20 num.add(m); 21 n--; 22 } 23 System.out.println(sum); 24 }
25 }