寫在前邊java
你們好,今天呢就繼續更新 Java 中級進階。之因此隔一天一更新是由於抽出一天的時間本身收集、整理要分享的知識點。在收集的時候,我我的很看重知識點自己值不值得去整理,而後把這些整理地知識點用「一根線」串起來。第一,方便本身記憶和使用;第二,分享給別人,讓別人看起來更有條理。「文章末附帶有本人原創的知識點的層次化整理連接,知識點結構更加清晰」。數組
JAVA集合框架框架
1. ArrayListide
1.1 ArrayList與數組的區別學習
數組的侷限性:測試
① 若是要存放多個對象,可使用數組,可是數組有侷限性。超過數組的長度就放不下,數組放不滿就浪費了。this
代碼:指針
1//先聲明一個學生類(Student.java) 2public class Student { 3 public String name; 4 public Student () { 5 } 6// 增長一個初始化name的構造方法 7public Student (String name) { 8 this.name = name; 9} 10// 重寫toString方法 11public String toString() { 12 return name; 13 } 14} 15//數組的侷限性,聲明測試類(Test.java) 16//聲明長度是5的數組 17Student Student [] = new Student [5]; 18//不用的數組就浪費了 19Student [0] = new Student ("張三"); 20//放不下要報錯 21Student [20] = new Student ("李四");
ArrayList存放對象:code
① 爲了解決數組的侷限性,引入容器類的概念。 最多見的容器類就是ArrayList。對象
② ArrayList 容器的容量會伴隨着對象的增長,自動增加
③只須要不斷往容器裏增長學生對象便可,不用擔憂會出現數組的邊界問題。
代碼:
1//容器類 ArrayList,用於存放對象 2ArrayList student = new ArrayList(); 3student .add( new Student ("張三")); 4System.out.println(student .size()); 5//只須要不斷往容器裏增長學生便可,不用擔憂會出現數組的邊界問題。 6student .add( new Student ("李四")); 7System.out.println(student .size());
1.2 經常使用方法
① add 增長「兩種方法」
☛直接add對象,把對象加在最後面:student.add(new Student("姓名"));
☛在指定位置加對象:student.add(3, 「李四」);
代碼:
1ArrayList students= new ArrayList(); 2// 把5個對象加入到ArrayList中 3for (int i = 0; i < 5; i++) { 4studenst.add(new Student("student" + i)); 5} 6System.out.println(studenst); 7// 在指定位置增長對象 8Student stu = new Student("李四"); 9studenst.add(3, stu ); 10System.out.println(studenst.toString());
② contains 判斷是否存在
☛經過方法contains 判斷一個對象是否在容器中。
☛判斷標準: 是不是同一個對象,而不是name是否相同。
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} 6Student stu = new Student ("李四"); 7students.add(stu ); 8System.out.println(students); 9// 判斷一個對象是否在容器中 10// 判斷標準: 是不是同一個對象,而不是name是否相同 11System.out.print("雖然一個新的對象名字也叫 student1,可是contains的返回是:"); 12System.out.println(students.contains(new Student("student1"))); 13System.out.print("而對stu 的判斷,contains的返回是:"); 14System.out.println(students.contains(stu)); 15}
③ get 獲取指定位置的對象
☛經過 get 獲取指定位置的對象,若是輸入的下標越界,同樣會報錯。
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} Studentstu= new Student("李四"); 7students.add(stu); 8//獲取指定位置的對象 9System.out.println(students.get(5)); 10//若是超出了範圍,依然會報錯 11System.out.println(students.get(6));
④ indexOf 獲取對象所處的位置
☛ indexOf 用於判斷一個對象在 ArrayList 中所處的位置。
☛ 與 contains 同樣,判斷標準是對象是否相同,而非對象的 name 值是否相等。
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} 6Student stu = new Student("李四"); 7students.add(stu ); 8System.out.println(students); 9System.out.println("stu所處的位置:"+students.indexOf(stu)); 10System.out.println("新的學生,可是名字是\"student1\"所處的位置:"+students.indexOf(new Student("student1")));
⑤ remove 刪除
☛ remove 用於把對象從ArrayList中刪除:students.remove(2);
☛ remove 能夠根據下標(對象)刪除 ArrayList 的元素: students.remove(stu);
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} 6Student stu= new Student("李四"); 7students.add(stu); 8System.out.println(students); 9students.remove(2); 10System.out.println("刪除下標是2的對象"); 11System.out.println(students); 12System.out.println("刪除李四"); students.remove(stu); 14System.out.println(students);
⑥ set 替換
☛ set 用於替換指定位置的元素
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} 6Student stu= new Student ("李四"); 7students.add(stu); 8System.out.println(students); 9System.out.println("把下標是5的元素,替換爲\"student5\""); 10students.set(5, new Student("student5")); 11System.out.println(students); 12}
⑦ size 獲取大小
☛ size 用於獲取 ArrayList 的大小
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Students("student" + i)); 5} 6Students stu= new Students("李四"); 7students.add(stu); 8System.out.println(students); 9System.out.println("獲取ArrayList的大小:"); 10System.out.println(students.size());
⑧ toArray 轉換爲數組
☛ toArray 能夠把一個 ArrayList 對象轉換爲數組。
☛ 注意:若是要轉換爲一個 Student 數組,那麼須要傳遞一個Student 數組類型的對象給 toArray(),這樣 toArray 方法才知道,你但願轉換爲哪一種類型的數組,不然只能轉換爲 Object 數組
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Students("student" + i)); 5} 6Student stu= new Student ("李四"); 7students.add(stu); 8System.out.println(students); 9Student st[] = (Student[])students.toArray(new Student []{}); 10System.out.println("數組:" +st);
⑨ addAll 把另外一個容器全部對象都加進來
☛ addAll 把另外一個容器全部對象都加進來
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} 6System.out.println("ArrayList heros:\t" + students); 7//把另外一個容器裏全部的元素,都加入到該容器裏來 8ArrayList anotherstudents = new ArrayList( ); 9anotherstudents .add(new Student("student a")); 10anotherstudents .add(new Student("student b")); 11anotherstudents .add(new Student("student c")); 12System.out.println("anotherstudents students:\t" + anotherstudents ); 13students.addAll(anotherstudents ); 14System.out.println("把另外一個ArrayList的元素都加入到當前 ArrayList:"); 15System.out.println("ArrayList students:\t" + students);
⑩ clear 清空
☛ clear 清空一個 ArrayList
代碼:
1ArrayList students= new ArrayList(); 2// 初始化5個對象 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student" + i)); 5} 6System.out.println("ArrayList students:\t" + students); 7System.out.println("使用clear清空"); 8students.clear(); 9System.out.println("ArrayList students:\t" + students);
1.3 List 接口
ArrayList 和 List:
① ArrayList 實現了接口 List。
② 常見的寫法會把引用聲明爲接口 List 類型。
③ 注意:是 java.util.List,而不是 java.awt.List。
代碼:
1import java.util.ArrayList; 2import java.util.List; 3import charactor.Student; 4public class TestCollection { 5public static void main(String[] args) { 6//接口引用指向子類對象(多態) 7List students = new ArrayList(); 8students .add( new Student("李四")); 9System.out.println(students .size()); 10} 11}
List接口的方法:
① 由於 ArrayList 實現了 List 接口,因此List接口的方法 ArrayList都實現了。
② 在 ArrayList 經常使用方法章節有詳細的講解
1.4 List接口
泛型 Generic:
① 不指定泛型的容器,能夠存聽任何類型的元素
② 指定了泛型的容器,只能存放指定類型的元素以及其子類
泛型的簡寫:
① 爲了避免使編譯器出現警告,須要先後都使用泛型
1List<Student> gen = new ArrayList<Student>();
② 不過JDK7提供了一個能夠略微減小代碼量的泛型簡寫方式
1List<Student> gen = new ArrayList<>();
1.5 遍歷
用 for 循環遍歷:
① 經過前面的學習,知道了能夠用 size() 和 get() 分別獲得大小,和獲取指定位置的元素,結合 for 循環就能夠遍歷出 ArrayList 的內容
代碼:
1List<Student> students= new ArrayList<Student>(); 2// 放5個Student進入容器 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student name " + i)); 5} 6// 第一種遍歷 for循環 7System.out.println("--------for 循環-------"); 8for (int i = 0; i < students.size(); i++) { 9Student s = students.get(i); 10System.out.println(s);
迭代器遍歷:
① 使用迭代器 Iterator 遍歷集合中的元素
代碼:
1List<Student> students= new ArrayList<Student>(); 2//放5個students進入容器 3for (int i = 0; i < 5; i++) { 4students.add(new students("student name " +i)); 5} 6//第二種遍歷,使用迭代器 7System.out.println("--------使用while的iterator-------"); 8Iterator<Student> it= students.iterator(); 9//從最開始的位置判斷"下一個"位置是否有數據 10//若是有就經過next取出來,而且把指針向下移動 11//直達"下一個"位置沒有數據 12while(it.hasNext()){ 13Student s = it.next(); 14System.out.println(s); 15} 16//迭代器的for寫法 17System.out.println("--------使用for的iterator-------"); 18for (Iterator<Student> iterator = students.iterator(); iterator.hasNext();) { 19Student student= (Student ) iterator.next(); 20System.out.println(student); 21}
用加強型 for 循環:
① 使用加強型 for 循環能夠很是方便的遍歷 ArrayLis t中的元素,這是不少開發人員的首選。
② 不過加強型 for 循環也有不足:沒法用來進行 ArrayList 的初始化,沒法得知當前是第幾個元素了,當須要只打印單數元素的時候,就作不到了。 必須再自定下標變量。
代碼:
1List<Student> students= new ArrayList<Student>(); 2// 放5個Student進入容器 3for (int i = 0; i < 5; i++) { 4students.add(new Student("student name " + i)); 5} 6// 第三種,加強型for循環 7System.out.println("--------加強型for循環-------"); 8for (Student s : students) { 9System.out.println(s); 10}