2018年4月17日JAVA
JAVA中的集合類:
JAVA中的集合類,是一種工具類,,就像是容器,存儲任意數量的具有共同屬性的對象。
集合的作用:
一、在類的內部對數據進行組織(如果有些屬性的類型相同,但意義與作用不同,就不能把它們放在同一個集合中)
二、可以簡單而快速的搜索大數量的條目;
三、有的集合接口,提供了一些列排列有序的元素,並且可以在序列中間快速的插入或者刪除有關元素(就比如說做廣播體操時候,學生站隊,你可以讓某隊某列的學生出列,也可以讓某個學生插入到某隊某列)
四、有的集合接口,提供了映射關系,可以通過關鍵字(key)去快速查找到對應的唯一對象,而這個關鍵字可以是任意類型。(就比如說你乘坐大巴車,存放行李的車廂就相當於一個集合,車廂裏難免會有一些款式相同的行李箱,那麽如何區分這些款式相同的行李箱呢?我們可以在行李箱上做上標記,而這個標記就是咱們說的關鍵字key)
與數組相比---為何選擇集合而不選擇數組:
一、 數組的長度,或者說容量是固定的,如果數組的長度不夠用了,咱們就必須新建一個,然後把原數組的元素都給復制過去,這樣就會很麻煩。而集合的長度或者說容量,它是可以在運行時擴展的,使用時比較方便(你可以把數組想象成一個打狗棍,做出來是多長就是多長,把集合當成如意金箍棒,想變多長變多長)
二、 數組只能通過下表來訪問元素,類型固定(比如說下表只能是整形的),而有的集合可以通過任意類型查找所映射的具體對象
JAVA中的集合框架:
主要由兩大家族組成的,分別是Collection家族和Map家族,Collection和Map是兩個接口,JAVA集合框架中的兩個接口根。
Collection主要有三個子接口,分別是List,Queue,Set.其中List和Queue接口裏邊的元素是排列有序的,並且可以是重復的,而Set中的元素是無序的,且不可重復。(List和Set比較常用,List把它翻譯成序列,Queue翻譯成隊列,而Set翻譯成集)List中有一個很常用的實現類叫ArrayList,咱們把它叫做數組序列。Queue中有一個很重要的實現類叫LinkedList(叫鏈表,它同時也是List中的一個實現類),Set也有一個很重要的實現類,叫HashSet(哈希集)
Map也有眾多的子接口,其中最重要的是它的實現類,其中有一個是HashMap(哈希表)。
在collection中存儲的就是一個一個的對象,而Map的內部,會以一個key,一個value兩個對象為一個映射去存儲數據,而這樣一個映射就是一個Entry類的實例,這個Entry類它是Map的一個內部類,把它翻譯成鍵值對,一個鍵一個值湊成映射的一對,其中key和value都可以是任意類型的對象(可以形象的把collection想象成單身宿舍,裏邊是一個一個的單身狗,而把Map想象成存儲的一對一對的夫婦,他們都是成對出現的(key和value))
List接口及其實現類------ArrayList
(1)List是元素有序並且可以重復的集合,被稱為序列
(2)List可以精確的控制元素的插入位置或刪除某個位置元素
(3)ArrayList-----數組序列,是List的一個重要實現類
(4)ArrayList底層是由數組實現的
實現功能-----模擬學生選課功能
選擇課程(往集合中添加課程)
刪除所選的某門課程(刪除集合中的元素)
查看所選課程
修改所選課程
首先定義一個課程類
package Chen_collection; /* * 課程類 */ public classCourse { private String id; private String name; public String get_id(){ return id; } public String get_name(){ return name; } public Course(String i,String n){ id=i; name=n; } } 然後是備選課程類 packageChen_collection; importjava.util.ArrayList; importjava.util.Arrays; importjava.util.Iterator; importjava.util.List; /* * 備選課程類 */ publicclass ListTest { /* * 用於存放備選課程的List */ public List courseToSelect; public ListTest(){//構造函數,用來初始化courseToselect //由於List是一個接口,所以我們不能直接將它實例化 courseToSelect=newArrayList();//使用ArrayList()方法來實現這個List接口 } /* * 用於向courseToSelect中添加備選課程 */ public void testAdd(){ //創建一個課程對象,並通過調用add()方法,添加到備選課程課程List中 Course cr1=newCourse("1","數據結構"); courseToSelect.add(cr1); //Coursetemp=courseToSelect.get(0);//因為只在裏邊添加了一個元素,而List和數組一樣,也是從0開始的 //這裏會報錯是因為,對象存入集合,都變成Object類型,取出時需要用類型轉換 Coursetemp=(Course)courseToSelect.get(0);//因為只在裏邊添加了一個元素,而List和數組一樣,也是從0開始的 System.out.println("添加了一個課程:"+temp.get_id()+":"+temp.get_name()); Course[] temp1={newCourse("3","離散數學"),new Course("4","大學英語")}; courseToSelect.addAll(Arrays.asList(temp1)); Coursecour1=(Course)courseToSelect.get(1); Course cour2=(Course)courseToSelect.get(2); System.out.println("添加了兩門課程:"+cour1.get_id()+":"+cour1.get_name()+";"+cour2.get_id()+ ":"+cour2.get_name()); } /* * 取得List中的元素的方法 */ public void testGet(){ intsize=courseToSelect.size(); System.out.println("有如下課程待選:"); for(inti=0;i<size;i++){ Coursecr1=(Course)courseToSelect.get(i); System.out.println("課程:"+cr1.get_id()+":"+cr1.get_name()); } } /* * 通過叠代器遍歷List * Iterator就是叠代器的意思 * 這個叠代器本身也是一個接口 */ public void testIterator(){ Iterator it=courseToSelect.iterator(); System.out.println("有如下課程待選:"); while(it.hasNext()){ Coursecr6=(Course)it.next(); System.out.println("課程:"+cr6.get_id()+":"+cr6.get_name()); } } public void forEach(){ for(Objectobj:courseToSelect){ Courseb=(Course)obj; System.out.println("課程"+b.get_id()+":"+b.get_name()); } } /* * 修改List中的元素 */ public void testModify(){ courseToSelect.set(1, newCourse("7","毛概")); } /* * 刪除List中的元素 */ public void testRemove(){ Course ct=(Course)courseToSelect.get(1);//把取出的類型強轉為Course類型 System.out.println("我是課程:"+ct.get_id()+":"+ct.get_name()+"我即將被刪除"); courseToSelect.remove(ct); System.out.println("該課程成功被 刪除"); } /* * 刪除多個元素 */ public void testRemoveAll(){ System.out.println("刪除第一個位置和第二個位置上的元素"); Course []tr={(Course)courseToSelect.get(0),(Course)courseToSelect.get(1)};//創建一個要刪除的課程的數組 courseToSelect.removeAll(Arrays.asList(tr));//將course數組轉化成一個集合,作為參數傳遞過去 forEach(); } public static void main(String[] args){ ListTest lt=new ListTest(); lt.testAdd(); lt.testGet(); lt.testIterator(); lt.forEach(); lt.testModify(); lt.forEach(); lt.testRemove(); lt.forEach(); lt.testRemoveAll(); } }
2018年4月17日JAVA