8.1 順序容器
容器是現(xiàn)代程序設(shè)計非惩饫铮基礎(chǔ)而重要的手段。
所謂容器特石,就是“放東西的東西”盅蝗。數(shù)組可以看作是一種容器,但是數(shù)組的元素個數(shù)一旦確定就無法改變姆蘸,這在實際使用中是很大的不足风科。一般意義上的容器,是指具有自動增長容量能力的存放數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)乞旦。在面向?qū)ο笳Z言中,這種數(shù)據(jù)結(jié)構(gòu)本身表達為一個對象题山。所以才有“放東西的東西”的說法兰粉。
Java具有豐富的容器,Java的容器具有豐富的功能和良好的性能顶瞳。熟悉并能充分有效地利用好容器玖姑,是現(xiàn)代程序設(shè)計的基本能力。
我們首先學(xué)習(xí)的是順序容器慨菱,即放進容器中的對象是按照指定的順序(放的順序)排列起來的焰络,而且允許具有相同值的多個對象存在。
泛型類 ArrayList<>
ArrayList<String> notes = new ArrayList<String>();
ArrayList是系統(tǒng)類庫中的一個容器類符喝。
- 容器類有兩個類型:
- 容器的類型
- 元素的類型
記事本源碼如下:
package notebook;
import java.util.ArrayList;
/**
* Created by WZZ on 10/31/2016.
*/
public class Notebook {
private ArrayList<String> notes = new ArrayList<String>();
public void add(String s){
notes.add(s);
}
public void add(String s, int location){
notes.add(location, s);
}
public int getSize(){
return notes.size();
}
public String getNote(int index){
return notes.get(index);
}
public void removeNote(int index){
notes.remove(index);
}
public String[] list(){
String[] a = new String[notes.size()];
notes.toArray(a);
return a;
}
public static void main(String[] args) {
Notebook nb = new Notebook();
nb.add("First");
nb.add("Second");
nb.add("Third", 1);
System.out.println(nb.getSize());
System.out.println(nb.getNote(0));
System.out.println(nb.getNote(1));
nb.removeNote(1);
String[] a = nb.list();
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
8.1 對象數(shù)組
當(dāng)數(shù)組的元素的類型是類的時候闪彼,數(shù)組的每一個元素其實只是對象的管理者而不是對象本身。因此,僅僅創(chuàng)建數(shù)組并沒有創(chuàng)建其中的每一個對象畏腕!
String[] a = new String[10];
- 當(dāng)我們創(chuàng)建了一個String數(shù)組后缴川,String數(shù)組中的每一個元素都是指向String類對象的管理者而已。默認(rèn)為"null".
- 對象數(shù)組中的每個元素都是對象的管理者而非對象本身
舉例:
public static void main(String[] args) {
int[] ia = new int[10];
String[] a = new String[10];
for (int i = 0; i < a.length; i++) {
a[i] = ""+i;
}
// System.out.println(ia[0]+2);
// System.out.println(a[0]+"a");
System.out.println(a[0].length());
String s = null;
System.out.println(s.length());
}
輸出結(jié)果描馅;
1
Exception in thread "main" java.lang.NullPointerException
at notebook.Notebook.main(Notebook.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)