Java语言程序设计实用教程第10章 数据结构与集合类.pptVIP

  • 3
  • 0
  • 约6.52千字
  • 约 57页
  • 2019-07-17 发布于辽宁
  • 举报

Java语言程序设计实用教程第10章 数据结构与集合类.ppt

Java的集合接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。 一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。 Java SDK不提供直接实现自Collection的类,Java SDK提供的类都是实现自Collection的“子接口”如List和Set。 Collection中元素的遍历 不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。 由Collection接口派生的两个接口是List和Set 典型的用法如下: Iterator it = collection.iterator(); // 获得一个迭代子 while(it.hasNext()) {   Object obj = it.next(); // 得到下一个元素 } List接口 List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。 实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。 Set接口 Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素 Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。 必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题 放入Set集合中的对象必须重写equals()方法 重写hashCode()方法,会提高性能 Map接口 Map没有继承Collection接口,Map提供key到value的映射 一个Map中不能包含相同的key,每个key只能映射一个value Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射 放入Map中的自定义类的对象,需要重写equals()和hashCode()方法 实现接口的类(表10-8) 实现List接口的类 实现Set接口的类 实现Map接口的类 实现List接口的类 ArrayList ArrayList:ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 如果你希望随机访问有序集合中的任何一个元素,或者总是把元素追加在末尾,优先考虑使用 LinkedList类 LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。 注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: List list = Collections.synchronizedList(new LinkedList(...)); 经常把元素插入到列表的中间,或者是顺序访问,优先考虑使用 Vector类 Vector非常类似ArrayList,但是Vector是同步的。 由Vector创建的Iterator,虽然和ArrayList创建的It

文档评论(0)

1亿VIP精品文档

相关文档