標籤:lin move get string 長度 課程 增刪改 數組實現 print
現實生活中:很多的事物湊在一起
數學中的集合:具有共同屬性的事物的總和
Java中的集合類:是一種工具類,就像是容器,儲存任意數量的具有共同屬性的對象
- 在類的內部,對資料進行組織(針對作用與意義一樣的屬性,將他們放到一個集合中)
- 簡單而快速的搜尋大數量的條目
- 有的集合介面,提供了一系列排列有序的元素,並且可以在序列中快速的插入或刪除有關元素
- 有的集合介面,提供了映射關係,可以通過關鍵字(key)去快速尋找到對應的唯一對象,而這個關鍵字可以是任意類型
- 數組的長度固定,集合長度可變
- 數組只能通過下標訪問元素,下標為整型,類型固定,而有的集合可以通過任意類型(下標)尋找所映射的具體對象
Collection和Map介面是兩個根介面。
Collection有三個子介面,分別是List(序列)、Queue(隊列)和Set(集)介面,其中List和Queue儲存的元素是排列有序的、可重複的,Set中儲存的元素是無序的、不可重複的。這三個子介面中List和Set是比較常用的。List 有個很常用也很重要的實作類別ArrayList(數組序列),Queue有個很重要是實作類別LinkedList(鏈表),LinkedList類同時也是List介面的實作類別,Set也有很重要的實作類別HashSet(雜湊集)。
Map介面也有很多子介面,常用的是它的實作類別,其中有個很重要的實作類別HashMap(雜湊表)。
在Collection中儲存的是一個一個獨立的對象。而Map內部,以一個Key一個Value兩個對象為一個映射去儲存資料,這樣的一個映射便是Entry類的執行個體,Entry類(索引值對)是Map的一個內部類,Key和Value可以是任意類型的對象。
Collection介面是List、Queue和Set介面的父介面;定義了可用於操作List、Set和Queue的增刪改查的操作
- List介面及其實作類別——ArrayList
List是元素有序並且可以重複的集合,被稱為序列;可以精確的控制每個元素的插入位置,或刪除某個位置元素;ArrayList是數組序列,底層是由數組實現的。
以學生選課為例,介紹List的使用:
1.1添加
Course.java
package com.test.collection;/** * 課程類 * @author Administrator * */public class Course { public String id; public String name; public Course(String id, String name){ this.id = id; this.name = name; }}
Student.java
package com.test.collection;import java.util.HashSet;import java.util.Set;/** * 學生類 * @author Administrator * */public class Student { public String id; public String name; public Set courses;//所選課程 public Student(String id, String name) { this.id = id; this.name = name; this.courses = new HashSet();//執行個體化sourses(Set是介面,介面不能被直接執行個體化) }}
ListTest.java
package com.test.collection;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;/** * 備選課程類 * @author Administrator * */public class ListTest { /** * 用於存放備選課程的List */ public List coursesToSelect; public ListTest() { this.coursesToSelect = new ArrayList(); } /** * 用於向coursesToSelect中添加備選課程 */ public void testAdd() { Course c1 = new Course("1", "資料結構");//建立課程對象的執行個體 coursesToSelect.add(c1);//調用add方法,添加課程到備選課程List中 Course temp = (Course) coursesToSelect.get(0);//對象存入集合都變成Object,忽略對象之前的類型,取出時需類型轉換 System.out.println("添加了課程:" + temp.id + ":" + temp.name); Course c2 = new Course("2", "C語言"); coursesToSelect.add(0, c2);//List中重載的另一個add()方法,可指定元素所添加的位置 Course temp2 = (Course) coursesToSelect.get(0); System.out.println("添加了課程:" + temp2.id + ":" + temp2.name); coursesToSelect.add(c1);//List中元素可以重複 Course temp0 = (Course) coursesToSelect.get(2); System.out.println("添加了課程:" + temp0.id + ":" + temp0.name); //以下方法會拋出數組下標越界異常 //Course c3 = new Course("3", "Java"); //coursesToSelect.add(4, c3); Course[] course = {new Course("3", "離散數學"), new Course("4", "組合語言")}; coursesToSelect.addAll(Arrays.asList(course)); Course temp3 = (Course) coursesToSelect.get(3); Course temp4 = (Course) coursesToSelect.get(4); System.out.println("添加了兩門課程:" + temp3.id + ":" + temp3.name + temp4.id + ":" + temp4.name); Course[] course2 = {new Course("5", "高等數學"), new Course("6", "電腦網路")}; coursesToSelect.addAll(2, Arrays.asList(course2)); Course temp5 = (Course) coursesToSelect.get(2); Course temp6 = (Course) coursesToSelect.get(3); System.out.println("添加了兩門課程:" + temp5.id + ":" + temp5.name + temp6.id + ":" + temp6.name); } public static void main(String[] args) { ListTest lt = new ListTest(); lt.testAdd(); }}
執行結果:
添加了課程:1:資料結構
添加了課程:2:C語言
添加了課程:1:資料結構
添加了兩門課程:3:離散數學4:組合語言
添加了兩門課程:5:高等數學6:電腦網路
1.2查詢
package com.test.collection;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;/** * 備選課程類 * @author Administrator * */public class ListTest { /** * 用於存放備選課程的List */ public List coursesToSelect; public ListTest() { this.coursesToSelect = new ArrayList(); } /** * 取得List中的元素的方法 */ public void testGet() { int size = coursesToSelect.size(); System.out.println("有以下課程選擇:"); for (int i = 0; i < size; i++) { Course c = (Course) coursesToSelect.get(i); System.out.println("課程:" + c.id + ":" + c.name); } } /** * 通過迭代器訪問集合元素 */ public void testIterator() { Iterator it = coursesToSelect.iterator(); System.out.println("有以下課程選擇(通過迭代器訪問):"); while (it.hasNext()) { Course c = (Course) it.next(); System.out.println("課程:" + c.id + ":" + c.name); } } /** * 通過for each方法訪問集合元素 */ public void testForEach() { System.out.println("有以下課程選擇(通過for each訪問):"); for (Object obj : coursesToSelect) { Course c = (Course) obj; System.out.println("課程:" + c.id + ":" + c.name); } } public static void main(String[] args) { ListTest lt = new ListTest(); lt.testGet(); lt.testIterator(); lt.testForEach(); }}
執行結果:
有以下課程選擇:
課程:2:C語言
課程:1:資料結構
課程:5:高等數學
課程:6:電腦網路
課程:1:資料結構
課程:3:離散數學
課程:4:組合語言
1.3修改
public class ListTest {public void testModify() { Course c = new Course("7", "毛概"); coursesToSelect.set(4, c); }}
修改後,有以下課程可以選擇:
課程:2:C語言
課程:1:資料結構
課程:5:高等數學
課程:6:網路技術
課程:7:毛概
課程:3:離散數學
課程:4:組合語言
1.4刪除
public class ListTest {public void testDelete() { /*coursesToSelect.remove(4);*/ /*Course c = (Course) coursesToSelect.get(4); coursesToSelect.remove(c); */ Course[] courses = {(Course) coursesToSelect.get(4), (Course) coursesToSelect.get(5)}; coursesToSelect.removeAll(Arrays.asList(courses)); System.out.println("刪除了課程"); }}
刪除後,有以下課程可以選擇:
課程:2:C語言
課程:1:資料結構
課程:5:高等數學
課程:6:網路技術
課程:4:組合語言
Java—集合架構List