集合类型数据结构.ppt
《集合类型数据结构.ppt》由会员分享,可在线阅读,更多相关《集合类型数据结构.ppt(31页珍藏版)》请在三一办公上搜索。
1、Java程序设计,赵志崑 山东财政学院计算机信息工程学院,问题,抽奖器程序中如何解决100人的限制?方法1:将预留空间改得足够大。造成内存空间浪费。如何确定多少为足够大。方法2:动态生成数组。效率较低方法3:使用链表。,Student students=new Student10000;,Selector1.javawhile(line!=null)students1=new StudenttotalCount+1;System.arraycopy(student,0,students,0,totalCount);students1totalCount=student;students=stu
2、dents1;totalCount+;line=in.readLine();,Selector2.javaclass Student private String id;private String name;private String department;public Student next;public Student();,Java对基本数据结构的支持,链表是一种非常常用的数据结构,类似的还有队列、集合等等,是否所有这些数据结构都要自己来实现呢?编写程序有两个关键问题,数据结构和算法。数据结构是组织和存储数据的方法算法是操作数据的方法有些数据结构和算法在绝大多数程序中都要用到,开发
3、工具的设计者就寻找一种机制,能够让开发人员不用每次都做重复劳动。头文件和库函数:最原始的方法。模板库(STL):C+中采用的方法。类和接口:Java中采用的方法。Java的设计者在设计Java时,充分考虑了这一点,通过单根继承(Object类),使用简单的类和接口提供了对许多基本数据结构的支持。,常用数据结构和算法,基本数据结构有四种:数组、链表、树和网。常用基本算法有两个:排序和查找(搜索)。排序:将一组数据逻辑上按一定顺序存放。查找:从一组数据中找出满足某一要求的数据。,功能定义和具体实现分开,Java中采用功能定义和具体实现分开的思想。功能定义:定义从外部看到的模型的功能,即模型可以如何
4、使用。具体实现:模型内部的实现机制。例如:录音机功能包括录音和放音。这些功能可以用磁带录音机、Mp3等来实现。,功能定义,具体实现,接口和实现,接口:Java中用接口来描述一个模型在逻辑上的功能。实现:Java中用具体的类来实现这些功能,在这些类中用某个具体的数据结构来实现接口定义的功能。例如:队列可以用链表实现。,接口和实现分开,将接口和实现分开:一种功能可以有多种实现方法。例如:队列既可以用链表实现,也可以用循环数组实现。编写程序时,了解接口即可完成逻辑功能,了解具体实现则可以提高程序效率和适用性。,集合框架中的接口,框架(framework)是类和接口的集合,这些类和接口拥有许多有用的功
5、能和机制。使用其中的某个或几个类和接口,能够完成一些特定功能。,RandomAccess,集合接口,映射接口,枚举器接口,随机访问标志接口,List列表,List描述列表接口,列表中元素可以重复,有先后顺序。public interface List extends Collection boolean add(Object o):将元素o添加到列表最后。void clear():清空列表内容。boolean contains(Object o):判断列表中是否包含元素o。Object get(int index):获取列表中index位置的元素。int indexOf(Object o):获
6、取元素o在列表中的位置。boolean isEmpty():列表是否为空。int lastIndexOf(Object o):获取列表中最后一个o出现的位置。ListIterator listIterator():获取一个枚举器。Object remove(int index):去除位置index的元素。boolean remove(Object o):去除列表中第一个出现的o元素。Object set(int index,Object element):用element取代位置index的元素。int size():返回列表中元素个数。List subList(int fromIndex,i
7、nt toIndex):得到一个子范围。Object toArray():将列表转化为一个数组。,Set集合,Set描述一个数学概念上的集合,集合中元素不能重复,没有先后顺序之分。public interface Set extends Collection boolean add(Object o):将元素o加入集合。boolean addAll(Collection c):将集合c中元素并入集合。void clear():清空集合。boolean contains(Object o):判断集合中是否包含元素o。boolean containsAll(Collection c):判断集合是否
8、全部包含c中元素。boolean equals(Object o):判断两个集合是否相等。boolean isEmpty():判断集合是否为空。Iterator iterator():返回一个枚举器。boolean remove(Object o):从集合中删除元素o。int size():返回集合元素个数。Object toArray():将集合转化为一个数组。,列表与集合功能之比较,列表中元素有位置的概念,集合中元素没有。列表中可以含有重复元素,集合中不能。,列表-Listboolean add(Object o)void clear()boolean contains(Object o)
9、boolean isEmpty()boolean remove(Object o)int size()Object toArray()Object get(int index)int indexOf(Object o)int lastIndexOf(Object o)ListIterator listIterator()Object remove(int index)Object set(int index,Object element)List subList(int fromIndex,int toIndex),集合-Setboolean add(Object o)void clear()
10、boolean contains(Object o)boolean isEmpty()boolean remove(Object o)int size()Object toArray()boolean addAll(Collection c)boolean containsAll(Collection c)boolean equals(Object o)Iterator iterator(),SortedSet有序集合,SortedSet描述一个自动排序的集合,除了Set中的功能为,还能够自动为集合中的元素排序。public interface SortedSet extends Set Ob
11、ject first():返回第一个元素。Object last():返回最后一个元素。SortedSet headSet(Object toElement):返回比toElement小的元素。SortedSet tailSet(Object fromElement):返回比fromElement大的元素。SortedSet subSet(Object fromElement,Object toElement):返回fromElement和toElement之间的元素。,Iterator枚举器,Iterator用于枚举集合或列表中的所有元素。public interface Iteratorb
12、oolean hasNext():是否还没有枚举完。Object next():下一个元素。void remove():从集合中删除刚枚举过的元素ListIterator用于枚举列表中的所有元素。public interface ListIterator extends Iteratorvoid add(Object o):在当前位置插入一个元素。boolean hasNext():正向是否还有其他元素。boolean hasPrevious():反向是否还有其他元素Object next():下一个元素。int nextIndex():返回下一个元素的位置。Object previous()
13、:上一个元素int previousIndex():返回上一个元素的位置。void remove():删除刚刚访问过的元素。void set(Object o):用o覆盖刚刚访问过的元素。,集合框架中的旧类,集合框架是从Java2开始才有的,但之前已有一些“旧类”,这些类现在也被纳入集合框架中。,集合框架中的新类,Java2新加入的类。,LinkedList链式列表,LinkedList是用双向循环链表来实现List接口的类。,private Entry addBefore(Object o,Entry e)Entry newEntry=new Entry(o,e,e.previous);=n
14、ewEntry;=newEntry;size+;modCount+;return newEntry;见LinkedList.java,public class LinkedList extends AbstractSequentialList implements List,Cloneable,private static class Entry Object element;Entry next;Entry previous;Entry(Object element,Entry next,Entry previous)this.element=element;this.next=next;t
15、his.previous=previous;,ArrayList数组列表,ArrayList是一个用数组来实现列表功能的类。,见ArrayList.javapublic class ArrayList extends AbstractList implements List,RandomAccess,Cloneable,private transient Object elementData;public void ensureCapacity(int minCapacity)modCount+;int oldCapacity=elementData.length;if(minCapacity
16、 oldCapacity)Object oldData=elementData;int newCapacity=(oldCapacity*3)/2+1;if(newCapacity minCapacity)newCapacity=minCapacity;elementData=new ObjectnewCapacity;System.arraycopy(oldData,0,elementData,0,size);,Vector(容器)的实现机制与ArrayList相同,区别在于:Vector支持多线程同步读写,ArrayList不支持。Vector的效率比ArrayList低。,列表举例,创建
17、一个链式列表,保存整数对象0-9,然后输出可以转化为数组输出;可以用枚举器输出;将上述功能改为用数组列表实现;应用多态,见Test1_1.javaimport java.util.*;public class Test1 public static void main(String args)LinkedList l=new LinkedList();for(int i=0;i10;i+)l.add(new Integer(i);String s=;for(int i=0;il.size();i+)Object o=l.get(i);s+=o+;System.out.println(s);,用
18、枚举器输出Iterator iterator=l.iterator();while(iterator.hasNext()s+=iterator.next()+;,用数组列表实现(Test1_2.java)ArrayList l=new ArrayList();,应用多态List l=new ArrayList();,用Vector(容器)实现List l=new Vector();,转化为数组Object pl=l.toArray();,列表中元素的类型,列表中可以放不同类型的对象由于多态性和单根继承,列表中使用的Object类型的引用可以指向任何对象。见Test1_3.java可以为列表中元
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集合 类型 数据结构
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6033597.html