6_Java容器類PPT課件_第1頁
6_Java容器類PPT課件_第2頁
6_Java容器類PPT課件_第3頁
6_Java容器類PPT課件_第4頁
6_Java容器類PPT課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、2021/3/912021/3/92容器的概念容器 APICollection 接口Iterator 接口Set 接口List 接口 和 Comparable 接口Map 接口2021/3/93Collection 表示一組對象,它是集中,收集的意思,就是把一些數(shù)據(jù)收集起來。Collection函數(shù)庫是在java.util 包下的一些接口和類,類是用來產(chǎn)生對象存放數(shù)據(jù)用的,而接口是訪問數(shù)據(jù)的方式。Collection函數(shù)庫與數(shù)組的兩點不同:數(shù)組的容量是有限制的,而Collection庫沒有這樣的限制,它容量可以自動的調(diào)節(jié) 。Collection函數(shù)庫只能用來存放對象,而數(shù)組沒有這樣的限制。Co

2、llection接口是Collection層次結(jié)構(gòu) 中的根接口,它定義了一些最基本的訪問方法,讓我們能用統(tǒng)一的方式通過它或它的子接口來訪問數(shù)據(jù)。區(qū)別:Collection代表一組對象, Collection函數(shù)庫就是java中的集合框架,Collection接口,是這個集合框架中的根接口。1.存放在Collection 庫中的數(shù)據(jù),被稱為元素(element) 。 2021/3/94CollectionHashSet(Set)LinkedListVector, ArrayList(List)HashtableHashmap(Map)TreeSet(SortedSet)TreeMap(Sorte

3、dMap)2021/3/95Collection 接口:定義了存取一組對象的方法,其子接口Set和List分別定義了存儲方式。 Set 中的數(shù)據(jù)對象沒有順序且不可以重復。 List 中的數(shù)據(jù)對象有順序且可以重復。Map 接口定義了存儲“鍵(key) 值(value)映射對”的方法。2021/3/96Collection 接口中所定義的方法:boolean add(Object element);boolean remove(Object element);boolean contains(Object element);int size(); boolean isEmpty(); void c

4、lear();Iterator iterator();boolean containsAll(Collection c);boolean addAll(Collection c);boolean removeAll(Collection c);boolean retainAll(Collection c);Object toArray(); 2021/3/97import java.util.*;public class CollectionTest public static void main (String args) Collection c = new ArrayList();/ 可

5、以放入不同類型的對象c.add (hello);c.add (new Boolean(true);c.add (new Integer(100);System.out.println (size + c.size() + : + c);System.out.println (contains: + c.contains(new Integer(100);System.out.println (c.remove(new Boolean(true);System.out.println (isEmpty: + c.isEmpty();System.out.println (size + c.siz

6、e() + : + c);輸出結(jié)果:size3: hello, true, 100contains: truetrueisEmpty: falsesize2: hello, 1002021/3/98public class Person private int id; private String name;public Person (int id, String name) this. id = id; this. name = name;public int getId() return id; public String getName() return name; public vo

7、id setId (int id) this. id = id;public void setName (String name) this. name = name;public String toString() return id: + id + |name: + name;2021/3/99import java.util.*;public class CollectionTest1 public static void main (String args) Collection c = new HashSet();c. add (new Person(1, “c+);c. add (

8、new Person(2, “java);System. out. println (c. size() + : + c);System. out. println (contains: + c. contains (new Person(2, java);System.out. println (c. remove (new Person(2, java);System. out. println (c. size() + : + c);輸出結(jié)果:2: id: 2|name: java, id: 1|name: c+contains: falsefalse2: id: 2|name: jav

9、a, id: 1|name: c+2021/3/910public int hashCode() final int PRIME = 31; int result = 1; result = PRIME * result + id; result = PRIME * result + (name = null) ? 0 : name.hashCode(); return result; public boolean equals(Object obj) if (this = obj) return true;if (obj = null) return false;if (getClass()

10、 != obj.getClass() return false;final Person other = (Person) obj;if (id != other.id) return false;if (name = null) if ( != null) return false; else if (!name.equals() return false;return true;lCollection類對象在調(diào)用remove、contains 等方法時需要比較對象是否相等,這會涉及到對象類型的 equals 方法和hashCode方法;對于自定義的類

11、型,需要重寫equals 和 hashCode 方法以實現(xiàn)自定義的對象相等規(guī)則。 l注意:Java中規(guī)定,兩個內(nèi)容相同的對象應該具有相等的 hash codes。l 增加Person類的equals和hashCode方法如下:2021/3/911熟悉Collection用法!2021/3/912所有實現(xiàn)了Collection接口的容器類都有一個iterator方法用以返回一個實現(xiàn)了Iterator接口的對象。Iterator對象稱作迭代器,用以方便的實現(xiàn)對容器內(nèi)元素的遍歷操作。Iterator接口定義了如下方法:boolean hasNext(); /判斷是否有元素沒有被遍歷Object ne

12、xt(); /返回游標當前位置的元素并將游標移動到下一個位置void remove(); /刪除游標左面的元素,在執(zhí)行完next之后該 /操作只能執(zhí)行一次游標游標Next()元素元素2021/3/913import java.util.*;public class IteratorTest public static void main(String args) Collection c = new ArrayList(); c.add(new Integer(1); c.add(new Integer(2); c.add(new Integer(3); c.add(new Integer(4

13、); Iterator it = c.iterator(); while (it.hasNext() /next()的返回值為Object類型,需要轉(zhuǎn)換為相應類型Object tem = it.next(); System.out.println (Value() + ); 輸出結(jié)果:輸出結(jié)果:1 2 3 4 2021/3/914import java.util.*;public class IteratorTest1 public static void main(String args) Collection c = new ArrayList();c.add(good);

14、c.add(morning);c.add(key); c.add(happy);for (Iterator it = c.iterator(); it.hasNext(); ) String tem = (String) it.next();if (tem.trim().length() = 3) it.remove();System.out.println(c);輸出結(jié)果:輸出結(jié)果:good, morning, happy2021/3/915Set 接口是Collection接口的子接口,Set接口沒有提供額外的方法,Set接口的特性是容器類中的元素是沒有順序的,而且不可以重復。Set 容器

15、可以與數(shù)學中“集合”的概念相對應。J2SDK API中 所提供的 Set 容器類有 HashSet,TreeSet 等。2021/3/916import java.util.*;public class SetTest public static void main (String args) Set s = new HashSet();s.add (hello);s.add (world);s.add (new Integer(4);s.add (new Double(1.2);s.add (hello); / 相同的元素不會被加入System.out.println (s);輸出結(jié)果:輸出

16、結(jié)果:4, hello, 1.2, world2021/3/917import java.util.*;public class TreeSetTest public static void main (String args) Set s = new TreeSet();s.add (new Integer(5); s.add (new Integer(1);s.add (new Integer(4); s.add (new Integer(2);s.add (new Integer(3); s.add (new Integer(4);Iterator it = s.iterator();w

17、hile (it.hasNext() Integer tem = (Integer) it.next(); System.out.println (Value();輸出結(jié)果:輸出結(jié)果:1, 2, 3, 4, 52021/3/918熟悉Iterator迭代器用法熟悉Set用法2021/3/919List接口是Collection的子接口,實現(xiàn)List接口的容器類中的元素是有順序的,而且可以重復。List 容器中的元素都對應一個整數(shù)型的序號記載其在容器中的位置,可以根據(jù)序號存取容器中的元素。J2SDK 所提供的 List 容器類有 ArrayList,LinkedList 等。多了一

18、些跟順序有關的方法: void add( Object element);void add (int index, Object element); Object get (int index);Object set (int index,Object element);/修改某一位置的元素 Object remove (int index); int indexOf (Object o);/如果沒有該數(shù)據(jù),返回-12021/3/920import java.util.*;public class ListTest public static void main(String argc) Li

19、st l1 = new ArrayList();for (int i = 0; i = 5; i+) l1.add(a + i);System.out.println(l1);list.add(3, a100);System.out.println(l1);list.set(6, a200);System.out.println(list);System.out.print(String) list.get(2) + );System.out.println(list.indexOf(a3);list.remove(1);System.out.println(list);輸出結(jié)果:輸出結(jié)果:a

20、0, a1, a2, a3, a4, a5a0, a1, a2, a3, a4, a5a0, a1, a2, a100, a3, a4, a5a0, a1, a2, a100, a3, a4, a5a0, a1, a2, a100, a3, a4, a200a0, a1, a2, a100, a3, a4, a200a2 4a2 4a0, a2, a100, a3, a4, a200a0, a2, a100, a3, a4, a2002021/3/921類 java.util.Collections 提供了一些靜態(tài)方法實現(xiàn)了基于List容器的一些常用算法。void sort(List) /對L

21、ist容器內(nèi)的元素排序, /排序的規(guī)則是按照升序進行排序。 void shuffle(List) /對List容器內(nèi)的元素進行隨機排列void reverse(List) /對List容器內(nèi)的元素進行逆續(xù)排列 void fill(List, Object) /用一個特定的對象重寫整個List容器int binarySearch(List, Object)/對于順序的List容器,采用折半查找的 /方法查找特定對象2021/3/922輸出結(jié)果:輸出結(jié)果:a0, a1, a2, a3, a4a1, a4, a2, a3, a0a0, a3, a2, a4, a1a0, a1, a2, a3, a4

22、2hello, hello, hello, hello, helloimport java.util.*;public class CollectionsTest public static void main(String argc) List aList = new ArrayList();for (int i = 0; i obj 返回負數(shù)表示 this obj實現(xiàn)了Comparable 接口的類通過實現(xiàn) comparaTo 方法從而確定該類對象的排序方式。2021/3/925public class Student implements Comparable private Strin

23、g name;private Integer score;public Student(String name, int score) = name;this.score = new Integer(score);public int compareTo(Object o) Student n = (Student) o;int a = pareTo(n.score);return (a != 0 ? a : pareTo();public String toString() return name: + name + score: + score.toStri

24、ng();2021/3/926import java.util.*;public class StudentTest public static void main(String args) List l1 = new LinkedList();l1.add(new Student(“ttt, 66);l1.add(new Student(“bbb, 77);l1.add(new Student(“ccc, 99);l1.add(new Student(“fff, 88);l1.add(new Student(“aaa, 66);System.out.println(l1);Collectio

25、ns.sort(l1);System.out.println(l1);name: ttt score: 66, name: bbb score: 77, name: ccc score: 99, name: fff score: 88, name: aaa score: 66name: aaa score: 66, name: ttt score: 66, name: bbb score: 77, name: fff score: 88, name: ccc score: 992021/3/927熟悉Comparable用法2021/3/928實現(xiàn)Map接口的類用來存儲鍵(key)值(valu

26、e) 對。Map 接口的實現(xiàn)類有HashMap和TreeMap等。Map類中存儲的鍵值對通過鍵來標識,所以鍵值不能重復。Object put(Object key, Object value);Object get(Object key);Object remove(Object key);boolean containsKey(Object key);boolean containsValue(Object value);int size();boolean isEmpty();void putAll(Map t); void clear(); 2021/3/929import java.u

27、til.*;public class MapTest public static void main(String args) Map m1 = new HashMap();Map m2 = new TreeMap();m1.put(one, new Integer(1);m1.put(two, new Integer(2);m1.put(three, new Integer(3);m2.put(A, new Integer(1);m2.put(B, new Integer(2);System.out.println(m1.size();System.out.println(m1.contai

28、nsKey(one);System.out.println(m2.containsValue(new Integer(1);if (m1.containsKey(two) int i = (Integer) m1.get(two).intValue();System.out.println(i);Map m3 = new HashMap(m1);m3.putAll(m2);System.out.println(m3.size();2021/3/930起因: JDK1.4以前類型不明確: 裝入集合的類型都被當作Object對待,從而失去自己的實際類型。 從集合中取出時往往需要轉(zhuǎn)型,效率低,容易產(chǎn)生錯誤。解決辦法: 在定義集合的時候同時定義集合

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論