Java中級進階之集合框架


寫在前邊
java

你們好,今天呢就繼續更新 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}
相關文章
相關標籤/搜索