收藏 分享(赏)

JAVA类集.wps

上传人:weiwoduzun 文档编号:4295948 上传时间:2018-12-21 格式:WPS 页数:49 大小:628.95KB
下载 相关 举报
JAVA类集.wps_第1页
第1页 / 共49页
JAVA类集.wps_第2页
第2页 / 共49页
JAVA类集.wps_第3页
第3页 / 共49页
JAVA类集.wps_第4页
第4页 / 共49页
JAVA类集.wps_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、1、课程名称:JAVA类集Collection、Set、List、Map、Iterator、Enumeration、ListIterator2、知识点2.1、上次课程的主要知识点1、 Comparable接口的作用2、 JAVA反射机制:Class类2.2、本次预计讲解的知识点1、 Collection接口的作用2、 List接口的作用及其子类的使用3、 Set接口的作用及其子类的使用4、 Map接口5、输出接口:Iterator、ListIterator、Enumeration3、具体内容3.1、认识类集3.1.1、基本概念类集就是一个动态的对象数组。对象数组可以保存一组对象,但是本身的大小

2、是固定的,不可改变。所以在操作中直接使用对象数组的话会比较麻烦,实际上类集就是将数据结构进行了包装了,使之使用更加的方便。3.1.2、主要类集接口在类集中存在以下几种主要接口A、Collection:是保存单值的最大父接口,里面可以保存一个个的对象B、Collection下有一个List的子接口,此接口可以保存重复的内容,而且此接口拥有了比父接口更多的方法。C、Collection下的另外一个子接口Set接口,此接口不可以保存重复的内容。D、Map接口,每次可以保存一对内容(keyvalue)E、 Iterator接口:此接口用于迭代输出,此接口通过Collection进行实例化操作F、 Li

3、stIterator接口,只能通过List接口进行实例化操作3.2、Collection接口3.2.1、Collection接口的定义Collection的接口定义如下:public interface Collection extends Iterable此接口使用了泛型的定义,在操作的时 定出具体的操作类型。此接口是单值存 的最大接口,可以 里面保存多个单值数据此接口有如下的方法定义:Collection的方法定义No. 方法 类型 1 boolean add(E o) 通 集 中 对象2 boolean addAll(Collection c) 通 将一个集 的内容 进 3 void c

4、lear() 通 此集 中的所有 4 boolean contains(Object o) 通 一个对象是 在集 中存在5 boolean containsAll(Collection c) 通 一组对象是 在集 中存在6 boolean equals(Object o) 通 对象比较7 int hashCode() 通 8 boolean isEmpty() 通 集 是 9 Iterator iterator() 通 Iterator接口实例化10 boolean remove(Object o) 通 定对象11 boolean removeAll(Collection c) 通 一组对象1

5、2 boolean retainAll(Collection c) 通 保存 定内容13 int size() 通 出集 的大小14 Object toArray() 通 将一个集 变 对象数组15 T toArray(T a) 通 定 的对象数组类型但是,在一 的中,直接使用Collection接口了,而基本上是使用其子接口。3.2.2、Collection子接口的定义子接口主要currency1 类:|- List:存 重复内容|- Set:存 不重复内容,“hashCode以及equals currency1是 是重复ficurrency1 其fl类:|- SortedSet: 接口3.

6、3、List接口3.3.1、List接口的定义List是Collection的子接口,里面可以保存个重复的内容,此接口的定义如下:public interface List extends Collection但是Collection不的是,在List接口中大 的了Collection接口,拥有了比Collection接口中更多的方法定义,其中有方法比较”用。下 出了List中的方法。List接口中的内容是可以进行 输出的, 定义了get(int index)方法。List的方法No. 方法 类型 1 void add(int index, E element) 通 在 定 加 2 boole

7、an addAll(int index, Collection c) 通 在 定 加一组 3 E get(int index) 通 定 的 4 int indexOf(Object o) 通 定 的 5 int lastIndexOf(Object o) 通 定 的 6 ListIterator listIterator() 通 ListIterator接口实例化7 E remove(int index) 通 定的 8 List subList(int fromIndex, int toIndex) 通 出集 中的子集 9 E set(int index, E element) 通 定 的 L

8、ist接口比Collection接口了更多的方法。而且方法操作 方便。3.3.2、List接口的”用子类3.3.2.1、ArrayList子类ArrayList是List子类,可以直接通过对象的多态, List接口实例化,此类的定义如下:public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, SerializableArrayList类了AbstractList类,AbstractList类的定义如下:public abstract class AbstractList exte

9、nds AbstractCollection implements List此类实了List接口,所以可以直接使用ArrayList List接口实例化。3.3.2.1.1、操作一: 集 中加 要 此类操作,可以可以直接使用Collection接口中定义的以下个方法: 每次加一个对象:add() 每次加一组对象:addAll()例: 加数据的操作package org.wjs.listdemo;import java.util.ArrayList;import java.util.Collection;import java.util.List;public class ArrayListDe

10、mo01 public static void main(String args) List allList = new ArrayList(); / 实例化List对象,只能是String类型Collection allCollection = new ArrayList(); / 实例化Collection,只能是String类型allList.add(“Hello“); / 此方法Collection而 allList.add(0, “World“);/ 此方法 List 定义的System.out.println(allList);allCollection.add(“ACCP“);/

11、 加数据allCollection.add(“www.ACCP.cn“);/ 加数据allList.addAll(allCollection);/ 此方法Collection而 ,加一组对象allList.addAll(0, allCollection);/ 此方法List 定义的,加一组对象System.out.println(allList);程 行结 World, HelloACCP, www.ACCP.cn, World, Hello, ACCP, www.ACCP.cn3.3.2.1.2、操作 : 可以使用以下的方法: Collection定义的方法:|- 每次 一个对象:boole

12、an remove(Object o)|- 每次 一组对象:boolean removeAll(Collection c) List的方法:|- 定 的 :E remove(int index)例: 对象package org.wjs.listdemo;import java.util.ArrayList;import java.util.List;public class ArrayListDemo02 public static void main(String args) List allList = new ArrayList(); / 实例化List对象,只能是String类型all

13、List.add(“Hello“); / 此方法Collection而 allList.add(0, “World“);/ 此方法 List 定义的allList.add(“ACCP“); / 加 allList.add(“www.ACCP.cn“);/ 加 allList.remove(0);allList.remove(“Hello“);System.out.println(allList);程 行结 :ACCP, www.ACCP.cn3.3.2.1.3、操作 :输出List中的内容在List接口中存在了 集 及出每一个数据的操作,其中 出数据是List的 用: 出 :public in

14、t size() 出 定 的 :public E get(int index)例:出 package org.wjs.listdemo;import java.util.ArrayList;import java.util.List;public class ArrayListDemo03 public static void main(String args) List allList = new ArrayList(); / 实例化List对象,只能是String类型allList.add(“Hello“); / 此方法Collection而 allList.add(“Hello“); /

15、 此方法Collection而 allList.add(0, “World“);/ 此方法 List 定义的allList.add(“ACCP“); / 加 allList.add(“www.ACCP.cn“);/ 加 for (int i = 0; i allList = new ArrayList(); / 实例化List对象,只能是String类型System.out.println(“集 操作是 “ + allList.isEmpty();allList.add(“Hello“); / 此方法Collection而 allList.add(0, “World“);/ 此方法 List

16、定义的allList.add(“ACCP“); / 加 allList.add(“www.ACCP.cn“);/ 加 System.out.println(allList.contains(“Hello“) ? “Hello“ 存在 “: “Hello“ 不存在 “);List allSub = allList.subList(2, 3);/ 出里面的currency1集 System.out.print(“集 :“);for (int i = 0; i allList = new ArrayList(); / 实例化List对象,只能是String类型allList.add(“Hello“)

17、; / 此方法Collection而 allList.add(0, “World“);/ 此方法 List 定义的allList.add(“ACCP“); / 加 allList.add(“www.ACCP.cn“);/ 加 String str = (String) allList.toArray(new String ); / 定 类型System.out.print(“ 定数组类型:“);for (int i = 0; i allList = new Vector(); / 实例化List对象,只能是String类型allList.add(“Hello“); / 此方法Collectio

18、n而 allList.add(0, “World“);/ 此方法 List 定义的allList.add(“ACCP“);/ 加数据allList.add(“www.ACCP.cn“);/ 加数据for (int i = 0; i allList = new Vector(); / 实例化Vector对象allList.addElement(“Hello“); / 此方法 Vector 己定义allList.addElement(“ACCP“);/ 此方法 Vector 己定义allList.addElement(“www.ACCP.cn“);/ 此方法 Vector 己定义for (int

19、i = 0; i extends AbstractSequentialListimplements List, Queue, Cloneable, Serializable既,此类主要是 链 的操作,所以在类中提供了以下的几个链 操作方法。LinkedList中操作链 的方法No. 方法 类型 1 public void addFirst(E o) 通 在链 头加 2 public void addLast(E o) 通 在链 结尾加 3 public E element() 通 链 的 头4 public boolean offer(E o) 通 将 定 加 链 的结尾5 public E

20、peek() 通 但并不 链 的头6 public E poll() 通 并 此链 的头7 public E removeFirst() 通 链 的第一个 8 public E removeLast() 通 链 的最一个 下面就编写一个程,观察链 的基本操作。3.3.2.4.1、操作一: 链 的头和结尾加数据了达 操作链 的目的,此时, 直接使用LinkedList类。 List中没有定义过多的方法。例: 链 加数据package org.wjs.listdemo;import java.util.LinkedList;public class LinkedListDemo01 public

21、static void main(String args) LinkedList link = new LinkedList();link.add(“A“); / 链 中加数据link.add(“B“); / 链 中加数据link.add(“C“); / 链 中加数据System.out.println(“初始化链 :“ + link);link.addFirst(“X“);/ 在链 的 头加内容link.addLast(“Y“);/ 在链 的 尾加内容System.out.println(“加头和尾之的链 :“ + link);程 行结 :初始化链 :A, B, C加头和尾之的链 :X, A

22、, B, C, Y3.3.2.4.2、操作 : 链 头在LinkedList中存在了多种 链 头的操作: 头:element() 不 头:peek() 并 头:poll() ;例: 头package org.wjs.listdemo;import java.util.LinkedList;public class LinkedListDemo02 public static void main(String args) LinkedList link = new LinkedList();link.add(“A“); / 链 中加数据link.add(“B“); / 链 中加数据link.ad

23、d(“C“); / 链 中加数据System.out.println(“1-1、element()方法 头:“ + link.element();System.out.println(“1-2、 之的链 内容:“ + link);System.out.println(“2-1、peek()方法 头:“ + link.peek();System.out.println(“2-2、 之的链 内容:“ + link);System.out.println(“3-1、poll()方法 头:“ + link.poll();System.out.println(“3-2、 之的链 内容:“ + link)

24、;程 行结 :1-1、element()方法 头:A1-2、 之的链 内容:A, B, C2-1、peek()方法 头:A2-2、 之的链 内容:A, B, C3-1、poll()方法 头:A3-2、 之的链 内容:B, C3.3.2.4.3、操作 :以先进先出的方式出 的数据在LinkedList类中存在了poll()方法,通过循环此操作,就可以把内容出,照先进先出(FIFO)的方式出内容。例:以FIFO方式出内容package org.wjs.listdemo;import java.util.LinkedList;public class LinkedListDemo03 public

25、static void main(String args) LinkedList link = new LinkedList();link.add(“A“); / 链 中加数据link.add(“B“); / 链 中加数据link.add(“C“); / 链 中加数据System.out.print(“以FIFO的方式输出:“);for (int i = 0; i extends CollectionList接口的定义并没有太大的别。Set接口的主要方法Collection是一致的,fi就是说Set接口并没有对Collection接口进行,只是比Collection接口的要 更加严格了,不能加

26、重复 。Set接口的实例是无法像List接口那样可以进行 的输出的。3.3.2、Set接口的”用子类3.3.2.1、HashSetHashSet是Set接口的一个子类,主要的特点是:无重复 ,但是里面是散存 的,是没有的。例: HashSetpackage org.wjs.setdemo;import java.util.HashSet;import java.util.Set;public class HashSetDemo01 public static void main(String args) Set allSet = new HashSet();allSet.add(“A“) ;a

27、llSet.add(“B“) ;allSet.add(“C“) ;allSet.add(“C“) ; / 重复 ,不能加 allSet.add(“C“) ; / 重复 ,不能加 allSet.add(“D“) ;allSet.add(“E“) ;System.out.println(allSet) ;程 行结 :D, A, C, B, E结 中可以 楚的 出,根本就 于无 。3.3.2.2、TreeSet如 对输 的数据进行有 ,则要使用TreeSet子类。TreeSet类的定义如下:public class TreeSet extends AbstractSetimplements Sort

28、edSet, Cloneable, SerializableTreeSet类fi是了AbstractSet类,此类的定义如下:public abstract class AbstractSetextends AbstractCollectionimplements Set例: TreeSetpackage org.wjs.setdemo;import java.util.Set;import java.util.TreeSet;public class TreeSetDemo01 public static void main(String args) Set allSet = new Tre

29、eSet();allSet.add(“A“) ;allSet.add(“B“) ;allSet.add(“C“) ;allSet.add(“C“) ; / 重复 ,不能加 allSet.add(“C“) ; / 重复 ,不能加 allSet.add(“D“) ;allSet.add(“E“) ;System.out.println(allSet) ;程 行结 :A, B, C, D, E3.3.2.3、关于TreeSet的排序说明既TreeSet本身是可以 的,那么在定义一个 己的类,观察其如何 。例: 定义类 package org.wjs.setdemo;import java.util.

30、Set;import java.util.TreeSet;class Person private String name;private int age;public Person(String name, int age) this.name = name;this.age = age;public String toString() return “姓名:“ + this.name + “;年龄:“ + this.age;public class TreeSetDemo02 public static void main(String args) Set allSet = new Tre

31、eSet();allSet.add(new Person(“张 “, 30);allSet.add(new Person(“李 “, 31);allSet.add(new Person(“王 “, 32);allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“赵六“, 33);allSet.add(new Person(“孙七“, 33); / 年龄重复System.out.println(allSet);程 行时错误:Except

32、ion in thread “main“ java.lang.ClassCastException: org.wjs.setdemo.Personat java.util.TreeMpare(TreeMap.java:1093)at java.util.TreeMap.put(TreeMap.java:465)at java.util.TreeSet.add(TreeSet.java:210)at org.wjs.setdemo.TreeSetDemo02.main(TreeSetDemo02.java:24)以上的程代 出了类转异”,之所以会出样的问题,是 没有 定 的规则,一个类 实Com

33、parable接口之才可以 TreeSet中加 。例: 定 规则package org.wjs.setdemo;import java.util.Set;import java.util.TreeSet;class Person implements Comparable / 实比较器private String name;private int age;public Person(String name, int age) this.name = name;this.age = age;public String toString() return “姓名:“ + this.name + “

34、;年龄:“ + this.age;public int compareTo(Person per) if (this.age per.age) return 1; else if (this.age allSet = new TreeSet();allSet.add(new Person(“张 “, 30);allSet.add(new Person(“李 “, 31);allSet.add(new Person(“王 “, 32);allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“王 “, 32); / 重复

35、,不能加 allSet.add(new Person(“赵六“, 33);allSet.add(new Person(“孙七“, 33); / 年龄重复System.out.println(allSet);程 行结 :姓名:张 ;年龄:30, 姓名:李 ;年龄:31, 姓名:王 ;年龄:32, 姓名:赵六;年龄:33 行结 中可以,重复的“王 ”只有一个了,但是“赵六”和“孙七”并不重复,只是年龄重复了,但是“孙七”却没有加 集 之中,造 此原 是 采用了比较器,比较器操作的时 如 个 没有进行比较的 定的话,则fi会认 是一个对象,所以此时 该将Person类中的compareTo方法中加姓

36、名比较。例:修改Person的比较器package org.wjs.setdemo;import java.util.Set;import java.util.TreeSet;class Person implements Comparable / 实比较器private String name;private int age;public Person(String name, int age) this.name = name;this.age = age;public String toString() return “姓名:“ + this.name + “;年龄:“ + this.a

37、ge;public int compareTo(Person per) if (this.age per.age) return 1; else if (this.age allSet = new TreeSet();allSet.add(new Person(“张 “, 30);allSet.add(new Person(“李 “, 31);allSet.add(new Person(“王 “, 32);allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.ad

38、d(new Person(“赵六“, 33);allSet.add(new Person(“孙七“, 33); / 年龄重复System.out.println(allSet);程 行结 :姓名:张 ;年龄:30, 姓名:李 ;年龄:31, 姓名:王 ;年龄:32, 姓名:孙七;年龄:33, 姓名:赵六;年龄:33以上的程中,孙七出了,但是王 只出了一个,掉了重复的内容,但是此时的重复内容掉,并不是真正意义上的掉重复 , 此时,“的是 Comparable 的,而如 在 HashSet则fi会出重复的内容。3.3.2.4、关于重复元素的说明在讲解之,先 观察以下的代 :package org.

39、wjs.setdemo;import java.util.HashSet;import java.util.Set;class Person / 实比较器private String name;private int age;public Person(String name, int age) this.name = name;this.age = age;public String toString() return “姓名:“ + this.name + “;年龄:“ + this.age;public class RepeatDemo04 public static void main

40、(String args) Set allSet = new HashSet();allSet.add(new Person(“张 “, 30);allSet.add(new Person(“李 “, 31);allSet.add(new Person(“王 “, 32);allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“赵六“, 33);allSet.add(new Person(“孙七“, 33); / 年龄重复System

41、.out.println(allSet);程 行结 :姓名:王 ;年龄:32, 姓名:李 ;年龄:31, 姓名:王 ;年龄:32, 姓名:赵六;年龄:33, 姓名:张 ;年龄:30, 姓名:孙七;年龄:33, 姓名:王 ;年龄:32结 中,内容重复了,所以说,此时的程并没有掉重复 。如 要 掉重复 ,则 进行对象的比较。一个类 覆写Object类中的equals()方法,才能掉重复 ,但是只覆写equals方法是不够的,需要覆写hashCode()方法,此方法 示一个 编 ,可以简单的理解 示一个对象的编 。一 的 是通过公式进行计的,可以将类中的 进行适的计, 出一个 。例:掉重复 pack

42、age org.wjs.setdemo;import java.util.HashSet;import java.util.Set;class Person / 实比较器private String name;private int age;public Person(String name, int age) this.name = name;this.age = age;public boolean equals(Object obj) if (this = obj) / 地址 return true;if (!(obj instanceof Person) / 传递进 的不是本类的对象r

43、eturn false;Person p = (Person) obj;/ 进行 下转型if (this.name.equals(p.name) / 依次比较elsereturn false ;public int hashCode()return this.name.hashCode() * this.age ;public String toString() return “姓名:“ + this.name + “;年龄:“ + this.age;public class RepeatDemo04 public static void main(String args) Set allSe

44、t = new HashSet();allSet.add(new Person(“张 “, 30);allSet.add(new Person(“李 “, 31);allSet.add(new Person(“王 “, 32);allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“王 “, 32); / 重复 ,不能加 allSet.add(new Person(“赵六“, 33);allSet.add(new Person(“孙七“, 33); / 年龄重复System.out.println(allSet);程

45、行结 :姓名:王 ;年龄:32, 姓名:李 ;年龄:31, 姓名:张 ;年龄:30, 姓名:孙七;年龄:33, 姓名:赵六;年龄:33最输出结 中的重复内容消失了,就是 equals和hashCode共作用的结 。3.4、SortedSet接口TreeSet的定义中可以,TreeSet里实了SortedSet接口,此接口主要是用于 操作的SortedSet接口定义如下:public interface SortedSet extends Set此接口fi是了Set接口。此接口中定义了以下的方法:SortedSet接口中定义的方法No. 方法 类型 1 Comparator comparator

46、() 通 有 的比较器2 E first() 通 集 中的第一个 3 SortedSet headSet(E toElement) 通 始 定 的集 4 E last() 通 最一个 5 SortedSet subSet(E fromElement,E toElement) 通 定对象间的 6 SortedSet tailSet(E fromElement) 通 定 最例: SortedSet接口package org.wjs.setdemo;import java.util.SortedSet;import java.util.TreeSet;public class TreeSetDemo

47、05 public static void main(String args) SortedSet allSet = new TreeSet(); / SortedSet实例化allSet.add(“A“);allSet.add(“B“);allSet.add(“C“);allSet.add(“C“); / 重复 ,不能加 allSet.add(“C“); / 重复 ,不能加 allSet.add(“D“);allSet.add(“E“);System.out.println(“第一个 :“ + allSet.first();System.out.println(“最一个 :“ + allSet.last();System.out.println(“headSet :“ + allSet.headSet(“C“);System.out.println(“tailSet :“ + allSet.tailSet(“C“);System.out.println(“subSet :“ + allSet.subSet(“B“,“D“);程 行结 :第一个 :A最一个 :EheadSet :A, BtailSet :C, D, EsubSet :B, C3.5、Queue接口Queue 示 。Lin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报