《Java程序设计--java集合类.ppt》由会员分享,可在线阅读,更多相关《Java程序设计--java集合类.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章 基础类库和工具类库Java集合类n集合类概述n 集合类作用、特点n 旧的集合类介绍n Vector、Hashtable、Stackn 新的集合类介绍n Collection、Set、Map、List1第六章 基础类库和工具类库集合类概述n集合类的作用:n Java的集合类提供了一些基本数据结构的支持。n例如Vector、Hashtable、Stack等。n集合类的使用:nJava的集合类包含在java.util包中。nimport java.util.*;2第六章 基础类库和工具类库集合类概述n集合类特点一:n只容纳对象。这一点和数组不同,数组可以容纳基本数据类型数据和对象。n如果集合
2、类中想使用基本数据类型,又想利用集合类的灵活性,可以把基本数据类型数据封装成该数据类型的对象,然后放入集合中处理。3第六章 基础类库和工具类库集合类概述n集合类特点二:n集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,这样设 计的目的是为了集合类的通用性。n因为Object类是所有类的祖先,所以可以在这些集合中存放任何类的对象而不受限制,但是切记在使用集合成员之前必须对它重新造型。4第六章 基础类库和工具类库集合类概述n下面根据JDK版本分两部分介绍Java的集合类。n第一部分:JDK1.1版本中的集合类。n第二部分:JDK1.2以后版本中的集合类。5第
3、六章 基础类库和工具类库数组n数组n基本数据类型数组n对象数组n举例说明数组的定义、使用。6class Honeybee int value;Honeybee(int v)value=v;public String toString()return new Integer(value).toString();public class ArraySize public static void main(String args)Honeybee a;/*System.out.println(a.length);产生编译错误,因为a没有定义大小*/Honeybee b=new Honeybee5;S
4、ystem.out.println(b.length);/输出5 for(int i=0;ib.length;i+)System.out.println(bi);/输出5个null例1:演示对象数组用法:7 Honeybee c=new Honeybee4;for(int i=0;ic.length;i+)ci=new Honeybee(i);System.out.println(c.length);/输出4 Honeybee d=new Honeybee(100),new Honeybee(200),new Honeybee(300);System.out.println(d.length)
5、;/输出3 a=d;/数组之间赋值 System.out.println(a.length);/输出3 for(int i=0;ia.length;i+)System.out.println(ai);/输出100,200,300 a=new Honeybee new Honeybee(1),new Honeybee(2);System.out.println(a.length);/输出2 例1:演示对象数组用法:8public class ArraySize2 public static void main(String args)int a;/*System.out.println(a.le
6、ngth);产生编译错误,因为a没有定义大小*/int b=new int5;System.out.println(b.length);/输出5 for(int i=0;ib.length;i+)System.out.println(bi);/输出5个0 int c=new int4;for(int i=0;ic.length;i+)ci=i;System.out.println(c.length);/输出4例2:演示基本类型数组用法:9 int d=100,200,300;System.out.println(d.length);/输出3 a=d;/数组之间赋值 System.out.pri
7、ntln(a.length);/输出3 for(int i=0;ia.length;i+)System.out.println(ai);/输出100,200,300 a=new int 1,2;System.out.println(a.length);/输出2 例2:演示基本类型数组用法:10第六章 基础类库和工具类库旧的集合类nVectornStacknHashtable11第六章 基础类库和工具类库Vector类nVector类实现了长度可变的数组。nVector中只能存放对象。nVector的元素通过下标进行访问。nVector类关键属性:ncapacity表示集合最多能容纳的元素个数。
8、ncapacityIncrement表示每次增加多少容量。nsize表示集合当前元素个数。Vector v=new Vector(100)12第六章 基础类库和工具类库Vector类nVector类关键方法:nvoid addElement(Object obj)nvoid add(int index,Object element)nObject elementAt(int index)nvoid insertElementAt(Object obj,int index)13第六章 基础类库和工具类库Vector类举例1import java.util.Vector;class Cat pri
9、vate int catNumber;Cat(int i)catNumber=i;void print()System.out.println(Cat#+catNumber);class Dog private int dogNumber;Dog(int i)dogNumber=i;void print()System.out.println(Dog#+dogNumber);转下页14Vector类举例1接上页:public class CatsAndDogs public static void main(String args)Vector cats=new Vector();for(in
10、t i=0;i7;i+)cats.addElement(new Cat(i);cats.addElement(new Dog(7);for(int i=0;icats.size();i+)(Cat)cats.elementAt(i).print();Object对象Cat对象15Vector类举例2修改Vector例1,用Enumeration。import java.util.Vector;import java.util.Enumeration;class Cat private int catNumber;Cat(int i)catNumber=i;void print()System.
11、out.println(Cat#+catNumber);class Dog private int dogNumber;Dog(int i)dogNumber=i;void print()System.out.println(Dog#+dogNumber);转下页16Vector类举例2接上页:public class CatsAndDogs public static void main(String args)Vector cats=new Vector();for(int i=0;i7;i+)cats.addElement(new Cat(i);cats.addElement(new D
12、og(7);/for(int i=0;icats.size();i+)/(Cat)cats.elementAt(i).print();Enumeration e=cats.elements();while(e.hasMoreElements()(Cat)e.nextElement().print();17第六章 基础类库和工具类库Stack类nStack类是Vector的子类。nStack类描述堆栈数据结构,即LIFO。nStack类的关键方法:npublic void push(Object item)npublic Object pop()npublic Object peek()npub
13、lic boolean empty()演示/把项压入栈顶 移除栈顶对象并作为此函数的值返回该对象/查看栈顶对象而不移除它/测试堆栈是否为空 18Stack类举例import java.util.*;public class Stacks static String months=1,2,3,4;public static void main(String args)Stack stk=new Stack();for(int i=0;imonths.length;i+)stk.push(monthsi);System.out.println(stk);System.out.println(ele
14、ment 2=+stk.elementAt(2);while(!stk.empty()System.out.println(stk.pop();19第六章 基础类库和工具类库Hashtable类nHashtable通过键来查找元素。nHashtable用一个特殊的值来确定键,名为hashcode(散列码)。所有对象都有一个 散列码,可以通过Object 类的hashCode()方法获得。20第六章 基础类库和工具类库Hashtable举例n该例子用来检验Math.random()方法的随机性。在理想情况下,它应该产生一系列完美的随机分布的数字。为了验证这一点,我们需要生成数量众多的随机数字,然
15、后计算落在不同范围内的数字量。该程序生成10000个随机数,看它们在020之间的分布如何。返回带正号的 double 值,大于或等于 0.0,小于 1.0。21第六章 基础类库和工具类库Hashtable举例import java.util.*;class Counter int i=1;public String toString()return Integer.toString(i);public class Statistics public static void main(String args)Hashtable ht=new Hashtable();for(int i=0;i10
16、000;i+)Integer r=new Integer(int)(Math.random()*20);if(ht.containsKey(r)(Counter)ht.get(r).i+;else ht.put(r,new Counter();System.out.println(ht);22第六章 基础类库和工具类库新集合类nJava1.2开始又一个庞大的集合体系,它用来完成各种集合操作。nCollectionnListnSetnMap23第六章 基础类库和工具类库集合框架中的接口24第六章 基础类库和工具类库集合框架中的接口nCollection:集合层次中的根接口,JDK没有提供这个接口
17、直接的实现类。nSet:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。nList:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。nMap:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。25第六章 基础类库和工具类库Collection26第六章 基础类库和工具类库SetnSet中的元素必须唯一。n添加到Set中的元素必须定义equals方法,以提供算法来判断欲添加进来的对象是否与已经存在的某对象相等,从而建立对象的唯一性。n实现Set接口的类有HashSet,TreeSet。4627351Se
18、t集集27第六章 基础类库和工具类库Set28第六章 基础类库和工具类库Set举例import java.util.*;public class SetDemo public static void main(String argv)HashSet h=new HashSet();/也可以 Set h=new HashSet()h.add(One);h.add(Two);h.add(One);/DUPLICATE h.add(Three);Iterator it=h.iterator();while(it.hasNext()System.out.println(it.next();29第六章
19、基础类库和工具类库回顾:n接口可以作为一种引用类型使用,如:DriveControl control=new Car();control.startEngine();接口创建一个完整的Car实例,Car是实现接口DriveControl的一个类/访问接口中定义的方法P4930第六章 基础类库和工具类库Set举例import java.util.*;public class SetDemo public static void main(String argv)HashSet h=new HashSet();/也可以 Set h=new HashSet()h.add(One);h.add(Two
20、);h.add(One);/DUPLICATE h.add(Three);Iterator it=h.iterator();while(it.hasNext()System.out.println(it.next();Iterator讲解 见P132 6.3.431第六章 基础类库和工具类库ListnList的明显特征是它的元素都有一个确定的顺序。n实现它的类有ArrayList和LinkedList。nArrayList内存中是顺序存储的。nLinkedList内存中是以链表方式存储的。2114List(列表列表)012332ArrayList举例import java.util.*;pub
21、lic class ArrayListDemo public static void main(String argv)ArrayList al=new ArrayList();/Add lots of elements to the ArrayList.al.add(new Integer(11);al.add(new Integer(12);al.add(new Integer(13);al.add(new String(hello);/First print them out using a for loop.System.out.println(Retrieving by index:
22、);for(int i=0;ial.size();i+)System.out.println(Element +i+=+al.get(i);33LinkedList类举例:import java.util.*;public class LinkedListDemo public static void main(String argv)LinkedList l=new LinkedList();l.add(new Object();l.add(Hello);l.add(zhangsan);ListIterator li=l.listIterator(0);while(li.hasNext()S
23、ystem.out.println(li.next();if(l.indexOf(Hello)0)System.err.println(Lookup does not work);else System.err.println(Lookup works);34第六章 基础类库和工具类库MapnMap接口用来维持很多“键值”对,以便通过键来查找相应的值。nHashMap基于散列表实现(替代Hashtable)nTreeMap在一个二叉树的基础上实现k3v2k1 v1k2 v1k4 v3Map(映射映射)35HashMap举例:import java.util.*;public class Has
24、hMapDemo public static void main(String argv)HashMap h=new HashMap();/The hash maps from company name to address.h.put(Adobe,Mountain View,CA);h.put(IBM,White Plains,NY);h.put(Sun,Mountain View,CA);String queryString=Adobe;String resultString=(String)h.get(queryString);System.out.println(They are located in:+resultString);36