Java————集合框架——list
目錄
一:List介面(使用的初步介紹)
1:List集合的特徵
——:第一個是有序;
——:第二個集合可以重複;
(1)ArrayList和List:List是一個介面,ArrayLIst是List介面的實現類。
(常見的寫法:會把引用宣告為介面List型別)
public static void main(String[] args){ List ls=new ArrayList(); ls.add(9); System.out.println(ls.size()); }
(2)List介面的方法:因為ArrayList實現了List介面,所以List介面的方法ArrayList都實現了。
二:List介面中重要的實現類:
(1)ArrayList集合:ArrayList即陣列列表(可變的陣列)
——: 宣告方法: List<String> list=new ArrayList<String>();
——: 優點:可以根據索引位置對集合進行快速的隨機訪問
——: 缺點:向指定的索引位置插入物件或刪除物件的速度較慢。
(2)LinkedList(用連結串列儲存物件)
——: List<String> list2 =new LinkedList<String>();
——:優點:便於向集合中插入和刪除物件
——: 缺點:隨機訪問集合中的物件時,效率較慢。
三:說明ArrayList實現類(陣列列表)
1:與陣列的區別
(1)使用陣列的侷限性:宣告為10的陣列長度,不用的陣列就浪費,超過10的個數,有放不下。
(2)ArrayList存放物件:為了解決陣列的侷限性,引入的容器類,最常見的容器類為ArrayList
容器的容量會隨著物件的增加,自動增長,不用擔心會出現陣列的邊界問題
public static void main(String[] args){ List ls=new ArrayList(); ls.add(9); System.out.println(ls.size()); ls.add(10); System.out.println(ls.size()); }
2:常用的方法
ArrayList 通過add() 新增元素 通過set() 替換元素 通過get() 取出元素 通過size() 這個方法,返回列表中元素的個數,//相當於陣列中length 通過clear() 清空元素 通過isEmpty() 判斷集合中是否有內容,true表示集合為空也就是沒有內容 通過remove() 刪除一個元素//,我們可以根據索引刪除,還可以根據具體的物件進行刪除 通過toArray() 是將集合直接轉化為Ojbect[]陣列。 兩種方法,帶引數 和 不帶引數的。
(1)增加
add有兩種用法
——:第一種是直接add物件,把物件加在最後面
——:第二種是在指定的位置加物件
public static void main(String[] args){
ArrayList a=new ArrayList();
for(int i=0;i<5;i++){//第一種
a.add(new Student("s1 "));
}
System.out.println(a);
Student sstudent = new Student("s2");
a.add(2,sstudent);//第二種
System.out.println(a);
System.out.println();
}
(2)contains判斷是否存在
通過contains判斷一個物件是否在容器中。 判斷的標準:是否為同一個物件,而不是name是否相同
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
System.out.println("student的學生");
System.out.println(student);
Student student1=new Student("Jay");
student.add(student1);
System.out.println(student);
System.out.println(student.contains(student1));
System.out.println(student.contains(new Student("Fern1")));
}
執行結果:
(3)獲取指定位置的物件
通過get獲取指定位置的物件,如果輸入的下標越界,一樣會報錯。
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"));
}
System.out.println(student.get(4));
System.out.println(student.get(5));//超出了範圍會報錯
}
執行結果:
(4)獲取物件所處的位置indexOf
indexOf用於判斷一個物件在ArrayList中所處的位置,與contains一樣,判斷標準是物件是否相同,而非物件的name值是否相等。
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"));
}
Student student1=new Student("Jay");
student.add(student1);
System.out.println(student);
System.out.println("Jay的位置"+student.indexOf(student1));
}
執行結果:
(5)刪除
remove用於把物件從ArrayList中刪除——heros.remove(specialHero); remove可以根據下標刪除ArrayList的元素——heros.remove(2);
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"));
}
Student student1=new Student("Jay");
student.add(student1);
System.out.println(student);
student.remove(2);
System.out.println("刪除下標為2的物件");
System.out.println(student );
student.remove(student1);
System.out.println("刪除student1");
System.out.println(student);
}
執行結果:
(6)替換
set用於替換指定位置的元素
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
Student student1=new Student("Jay");
student.add(student1);
System.out.println(student);
student.set(1,new Student("Fern5"));
System.out.println("把下標是1的元素,替換為Fern5");
System.out.println(student);
}
執行結果:
(7)獲取大小:size
size 用於獲取ArrayList的大小
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
Student student1=new Student("Jay");
student.add(student1);
System.out.println(student);
System.out.println("獲取ArrayList的大小");
System.out.println(student.size());
}
執行結果:
(8)轉換為陣列
toArray可以把一個ArrayList物件轉換為陣列。 需要注意的是,如果要轉換為一個Hero陣列,那麼需要傳遞一個Hero陣列型別的物件給toArray(),這樣toArray方法才知道,你希望轉換為哪種型別的陣列,否則只能轉換為Object陣列。
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
Student student1=new Student("Jay");
student.add(student1);
System.out.println(student);
Student s[]=(Student[])student.toArray(new Student[]{});
System.out.println("陣列"+s);
}
執行結果:
(9)addAll:把另一個容器所有物件都加進來:
addAll 把另一個容器所有物件都加進來
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
System.out.println("student的學生");
System.out.println(student);
ArrayList anotherStudent = new ArrayList();
anotherStudent.add(new Student("jiang1"));
anotherStudent.add(new Student("jiang2"));
anotherStudent.add(new Student("jiang3"));
anotherStudent.add(new Student("jiang4"));
System.out.println("anotherStudent的學生");
System.out.println(anotherStudent);
student.addAll(anotherStudent);
System.out.println("把anotherStudent的元素加入到student中");
System.out.println("合併後的student");
System.out.println(student);
}
執行結果:
(10)清空:clear 清空一個ArrayList
程式碼:
public static void main(String[] args){
ArrayList student = new ArrayList();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
System.out.println("student的學生");
System.out.println(student);
student.clear();
System.out.println("使用clear清空");
System.out.println(student);
}
執行結果:
四:遍歷。
1:for迴圈遍歷
程式碼
public static void main(String[] args){
List<Student> student=new ArrayList<Student>();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
System.out.println(student);
//第一種:for迴圈遍歷
for(int i=0;i<student.size();i++){
Student s=student.get(i);
System.out.println(s);
}
}
執行結果:
2:迭代器遍歷
程式碼:
public static void main(String[] args){
List<Student> student=new ArrayList<Student>();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
System.out.println(student);
//第二種:迭代器遍歷
Iterator<Student> it=student.iterator();
while(it.hasNext()){
Student s=it.next();
System.out.println(s);
}//使用while的Iterator
for(Iterator<Student> iterator=student.iterator();iterator.hasNext();){
Student s=(Student)iterator.next();
System.out.println(s);
}//迭代器的for寫法
}
執行結果:
3:增強型for迴圈
程式碼:
public static void main(String[] args){
List<Student> student=new ArrayList<Student>();
for(int i=0;i<5;i++){
student.add(new Student("Fern"+i));
}
System.out.println(student);
//增強型for寫法
for(Student s:student){
System.out.println(s);
}
}
結果: