集合和數組的區別 共同點:都是存儲數據的容器 不同點:數組的容量是固定的,集合的容量是可變的 ArrayList的構造方法和添加方法 public ArrayList() 創建一個空的集合對象 構造一個初始容量為 10 的空列表。 public boolean add(E element) 將指定的 ...
集合和數組的區別
共同點:都是存儲數據的容器
不同點:數組的容量是固定的,集合的容量是可變的
ArrayList的構造方法和添加方法
public ArrayList() |
創建一個空的集合對象 構造一個初始容量為 10 的空列表。 |
public boolean add(E element) | 將指定的元素追加到此集合的末尾 |
public void add(int index, E element) | 在此集合中的指定位置插入指定的元素 |
在出現E的地方我們使用引用數據類型替換即可 , 在<E>中指定數據類型,集合就預設存儲該類型的數據,不是該類型數據就會報錯,
ArrayList 沒加<E>,可以存儲任意數據類型
ArrayList<E>: 可調整大小的數組實現 ;<E>是一種特殊的數據類型,泛型。
<> 泛型: 對集合容器存儲的數據類型進行限制
成員方法【E代表元素】
刪除指定的元素,返回刪除是否成功 | |
---|---|
public E remove(int index) | 刪除指定索引處的元素,返回被刪除的元素 |
public E set(int index,E element) | 修改指定索引處的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引處的元素 |
public int size() |
import java.util.ArrayList; class Test { public static void main(String[] args) { //創建集合 ,創建一個String類型的集合, ArrayList<String> array = new ArrayList<String>(); //添加元素 預設在末尾追加 array.add("hello"); array.add("world"); array.add("java"); //public boolean remove(Object o):刪除指定的元素,返回刪除是否成功 // System.out.println(array.remove("world")); 刪除成功返回True // System.out.println(array.remove("javaee")); 沒有這個元素,刪除失敗,返回False //public E remove(int index):刪除指定索引處的元素,返回被刪除的元素 // System.out.println(array.remove(1)); 返回刪除該元素的值,該處返回world這個元素 //IndexOutOfBoundsException 數組下標越界異常 // System.out.println(array.remove(3));刪除沒有該下標的元素會造成 數組下標越界異常 //public E set(int index,E element):修改指定索引處的元素,返回被修改的元素 // System.out.println(array.set(1,"javaee")); //IndexOutOfBoundsException 數組下標越界異常 // System.out.println(array.set(3,"javaee")); //public E get(int index):返回指定索引處的元素 // System.out.println(array.get(0)); // System.out.println(array.get(1)); // System.out.println(array.get(2)); //System.out.println(array.get(3)); //IndexOutOfBoundsException數組下標越界異常//public int size():返回集合中的元素的個數 System.out.println(array.size()); //輸出集合 System.out.println("array:" + array); } }
ArrayList存儲字元串並遍歷
創建一個存儲學生對象的集合,存儲3個學生對象,使用程式實現在控制台遍歷該集合
/* 思路: 1:定義學生類 2:創建集合對象 3:創建學生對象 4:添加學生對象到集合中 5:遍歷集合,採用通用遍歷格式實現 */ public class ArrayListTest { public static void main(String[] args) { //創建集合對象 ArrayList<Student> array = new ArrayList<>(); //創建學生對象 Student s1 = new Student("張三", 30); Student s2 = new Student("李四", 33); Student s3 = new Student("麻子", 18); //添加學生對象到集合中 array.add(s1); array.add(s2); array.add(s3); //遍歷集合,採用通用遍歷格式實現 for (int i = 0; i < array.size(); i++) { Student s = array.get(i); System.out.println(s.getName() + "," + s.getAge()); // 列印出student類的屬性 } } public class Student { // 一個student類 private String name; // 私有類 private int age; public Student() { // 空參構造構造方法 } public Student(String name, int age) { // 有參構造方法 this.name = name; this.age = age; } public String getName() { // 獲取私有屬性方法 return name; } public void setName(String name) { // 獲取私有屬性方法 this.name = name; } public int getAge() { // 獲取私有屬性方法 return age; } public void setAge(int age) { // 獲取私有屬性方法 this.age = age; } } }
創建一個存儲學生對象的集合,存儲3個學生對象,使用程式實現在控制台遍歷該集合
package array; import java.util.ArrayList; import java.util.Scanner; /* 思路: 1:定義學生類,為了鍵盤錄入數據方便,把學生類中的成員變數都定義為String類型 2:創建集合對象 3:鍵盤錄入學生對象所需要的數據 4:創建學生對象,把鍵盤錄入的數據賦值給學生對象的成員變數 5:往集合中添加學生對象 6:遍歷集合,採用通用遍歷格式實現 */ public class ArrayListTest { public static void main(String[] args) { //創建集合對象 ArrayList<Student> array = new ArrayList<Student>(); //為了提高代碼的復用性,我們用方法來改進程式 addStudent(array); addStudent(array); addStudent(array); //遍歷集合,採用通用遍歷格式實現 for (int i = 0; i < array.size(); i++) { Student s = array.get(i); // 此處獲得的是該集合中元素的地址 System.out.println(s.getName() + "," + s.getAge()); } } /* 兩個明確: 返回值類型:void 參數:ArrayList<Student> array */ public static void addStudent(ArrayList<Student> array) { //鍵盤錄入學生對象所需要的數據,Scanner類 Scanner sc = new Scanner(System.in); System.out.println("請輸入學生姓名:"); String name = sc.nextLine(); System.out.println("請輸入學生年齡:"); int age = sc.nextInt(); //創建學生對象,把鍵盤錄入的數據賦值給學生對象的成員變數 Student s = new Student(); s.setName(name); s.setAge(age); //往集合中添加學生對象 array.add(s); } static class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } }
關於remove()方法的細節問題
package com.heima.test; import java.util.ArrayList; public class Test4 { /* 需求:創建一個存儲String的集合 內部存儲(test,張三,李四,test,test)字元串 刪除所有的test字元串,刪除後,將集合剩餘元素列印在控制台 思路: 1. 創建集合對象 2. 調用add方法,添加字元串 3. 遍歷集合,取出每一個字元串元素 4. 加入if判斷,如果是test字元串,調用remove方法刪除 5. 列印集合元素 // 註意: 根據元素進行刪除, 只能刪除集合中的第一個元素 list.remove("test"); */ public static void main(String[] args) { // 1. 創建集合對象 ArrayList<String> list = new ArrayList<>(); // 2. 調用add方法,添加字元串 list.add("test"); list.add("張三"); list.add("李四"); list.add("test"); list.add("test"); // 3. 遍歷集合,取出每一個字元串元素 for (int i = 0; i < list.size(); i++) { String s = list.get(i); // 4. 加入if判斷,如果是test字元串,調用remove方法刪除 //if(s.equals("test")){}這種方法不推薦,萬一s是一個null,就會出現空指針異常,所以使用常量調用equeals避免產生空指針異常 if("test".equals(s)){ list.remove(i); i--; //每次刪除目標元素之後,其餘元素會上移將刪除後的下標補齊,然後指針才下移到i+1的下標,判斷元素 } } System.out.println(list); } }