java下第一章集合框架.ppt_第1页
java下第一章集合框架.ppt_第2页
java下第一章集合框架.ppt_第3页
java下第一章集合框架.ppt_第4页
java下第一章集合框架.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第一章,集合框架,学习目标,熟悉Java2之前的容器类的继承关系,熟练使用其中的类和接口。 熟悉Java集合框架,熟练使用其中的相关类和接口。 熟练使用集合类的泛型用法。,Java2之前的容器类,在Java2之前,标准的Java类库只能为最有用的数据结构提供很小的一组类,我们通常称之为“容器类”。容器类是由“两条线”组成。,Enumeration接口,Enumeration接口是贯穿于整个Java 2之前容器类的“迭代器”接口,定义了可以枚举(遍历)容器中元素的方法,只能单方向运动。 成员方法: public boolean hasMoreElements() public E nextElement(),范例解析,对于Enumeration接口来说,有一种通常的写法,如: while( en.hasMoreElements() ) Object obj = en.nextElement(); /其它操作 ,集合框架概述,java.util包中包含了Java最强大的子系统之一,这就是“集合框架”。“集合框架”是在Java2初始版本中增加进来的,Java2版本1.4和1.5中增强了它的功能。一个集合就是一组对象的容器。集合的加入导致了java.util中许多元素在构造和体系结构方面的根本变化,它也扩展了能够应用的任务域。所以说,集合是所有Java程序员都需要密切关注并熟练掌握的一种技术。,集合类层次关系,Iterator接口,Iterator接口是集合框架中的单向迭代器。 成员方法: public boolean hasNext() public E next() public void remove(),ListIterator接口,ListIterator是Iterator接口的子接口,是集合框架中的双向迭代器。 成员方法: public boolean hasPrevious() public E previous() public void add(E obj) public void set(E obj) public int nextIndex() public int previousIndex(),Collection接口 - 1,Collection接口是集合框架的基础,声明了多数集合类都有的核心方法,因为多数的集合都实现Collection接口,熟悉它的方法对清楚理解集合框架是非常必要的。 成员方法: public Iterator iterator() public boolean add(E o) public boolean addAll(Collection c),Collection接口 - 2,成员方法: public boolean remove(Object o) public boolean removeAll(Collection c) public boolean retainAll(Collection c) public void clear() public int size() public boolean isEmpty() public boolean equals(Object o),Collection接口 - 3,成员方法: public boolean contains(Object o) public boolean containsAll(Collection c) 其它方法参照API文档。,List结构层次关系,List接口 - 1,成员方法: public ListIterator listIterator() public ListIterator listIterator(int index) public void add(int index,E element) public boolean addAll(int index,Collection c) public E set(int index,E element) public E get(int index),List接口 - 2,成员方法: public List subList(int fromIndex,int toIndex) public int indexOf(Object o) public int lastIndexOf(Object o),Vector类 - 1,在编程中,经常用数组来对一些数据进行操作,不仅编程方便,而且效率高,但是,数组必须是定长的,其元素类型必须一致,不能满足动态增元素和存放不同类型的元素的需要。java.util包中的Vector类正是用来处理这种情况的。 构造方法: public Vector(),Vector类 - 2,构造方法: public Vector(int initialCapacity) public Vector(int initialCapacity,int capacityIncrement) public Vector(Collection c) 成员方法: public int capacity() public int size(),Vector类 - 3,成员方法: public void addElement(E obj) public void insertElementAt(E obj,int index) public void setElementAt(E obj,int index) public boolean removeElement(Object obj) public void removeElementAt(int index) public void removeAllElements(),Vector类 - 4,成员方法: public E firstElement() public E lastElement() public E elementAt(int index) public boolean isEmpty() public boolean contains(Object elem) public int indexOf(Object elem) public int indexOf(Object elem,int index),Vector类 - 5,成员方法: public int lastIndexOf(Object elem) public int lastIndexOf(Object elem,int index) public Enumeration elements() public boolean equals(Object o) public Object clone() public void trimToSize() public void setSize(int newSize),Vector类 - 6,上述方法都是在Java2之前的容类中出现的方法,因已将Vector纳入集合框架,所以之前的方法也进行了泛化处理。 练习:(1)构造一个Vector对象,存储10个String对象和10个Integer对象,随机存,要求输入所有Integer对象封装值的和、所有String对象连接一起的值。(2)构造一个Vector对象,存储10个Number对象,然后用泛型方法进行迭代、求和。 (分别用Enumeration和Iterator完成迭代操作),Stack类 - 1,Stack类是实现了标准的后进先出的堆栈,是Vector的子类,但是它的下标是从1开始的(栈顶下标为1,栈底下标为size)。所以说Vector类所用到的方法Stack的方法都可以用,但是在实际应用中,尽量不使用继承来的方法。 构造方法: public Stack(),Stack类 - 2,成员方法: public E push(E item) public E pop() public E peek() public boolean empty() public int search(Object o) 练习:构造一个Stack对象,测试入栈出栈操作。,ArrayList类,ArrayList是底层以数组实现的List。 构造方法: public ArrayList() public ArrayList(int initialCapacity) public ArrayList(Collection c) 成员方法: public void trimToSize() 练习:创建一个ArrayList对象,测试添加元素、单向遍历及双向遍历。,CopyOnWriteArrayList类,ArrayList 的一个线程安全的变体,其中所有可变操作(添加、设置,等等)都是通过对基础数组进行一次新的复制来实现的。 构造方法: public CopyOnWriteArrayList() public CopyOnWriteArrayList(Collection c) public CopyOnWriteArrayList(E toCopyIn),LinkedList类 - 1,LinkedList是底层以双向链表实现的List。 构造方法: public LinkedList() public LinkedList(Collection c) 成员方法: public void addFirst(E o) public void addLast(E o),LinkedList类 - 2,成员方法: public E getFirst() public E getLast() public E removeFirst() public E removeLast() 练习:创建一个LinkList,添加、插入、删除元素的测试。,比较器 Comparable接口,Comparable接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法。 成员方法: public int compareTo(T o),比较器 Comparator接口,比较方法强行对某些对象 Collection 进行整体排序。可以将 Comparator 传递给 sort 方法从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如 TreeSet 或 TreeMap)的顺序。 成员方法: public int compare(T o1,T o2) public boolean equals(Object obj),Queue结构层次关系,Queue接口,Queue代表的是先进先出的队列,有如下 行为: 成员方法: public boolean offer(E element) public E remove() public E poll() public E peek() public E element(),范例解析,import java.util.*; public class LinkedListQueueTest public static void main(String args) Queue q = newLinkedList(); q.offer(1); q.offer(2); Iterator iter = q.iterator(); while( iter.hasNext() ) Integer i = iter.next,范例解析,System.out.println(i); while( q.peek() != null ) /.OR. !q.isEmpty() Integer i = q.poll(); System.out.println(i); ,BlockingQueue接口 - 1,Queue接口有七个具体实现的子类,其中实现了BlockingQueue 接口的五个“阻塞队列类”和两个“非阻塞队列类”(PriorityQueue 和 ConcurrentLinkedQueue)。 成员方法: public int drainTo(Collection c) public int drainTo(Collection c, int maxElements),BlockingQueue接口 - 2,成员方法: public boolean offer(E o, long timeout, TimeUnit unit) throws InterruptedException public E poll(long timeout, TimeUnit unit) throws InterruptedException public void put(E o) throws InterruptedException public E take() throws InterruptedException public int remainingCapacity(),BlockingQueue接口 - 3,BlockingQueue接口五个实现类分别是: (1)ArrayBlockingQueue (2)LinkedBlockingQueue (3)PriorityBlockingQueue (4)DelayQueue (5)SynchronousQueue,Set结构层次关系,HashSet类 - 1,HashSet扩展AbstractSet并且实现Set接口。它创建一个使用哈希表存储的集合。哈希表是通过使用称为散列法的机制来存储信息的。在散列法中,键的信息内容用于确定一个唯一的值,称为它的哈希码(散列码)。然后哈希码作为与键相关的数据存储之处的索引使用。键到它的哈希码的转化是自动完成的,我们不会看到哈希码本身,同样,哈希码也不能直接索引哈希表。,HashSet类 - 2,构造方法: public HashSet() public HashSet(int initialCapacity) public HashSet(int initialCapacity,float loadFactor) public HashSet(Collection c) 练习:创建一个HashSet,添加元素后遍历,观察顺序与添加顺序是否一致。,SortedSet接口,SortedSet接口是Set接口的子接口,功能是保证集合中元素始终处于“升”序的状态。 成员方法: public Comparator comparator() public E first() public E last() public SortedSet headSet(E toElement) public SortedSet subSet(E fromElement,E toElement) public SortedSet tailSet(E fromElement),TreeSet类 - 1,TreeSet类的底层结构为树的一种有序的Set。对象以升序顺序存储,访问和遍历它的时间很快,这使得TreeSet成为存储大量必须能很快查找的排序信息的很好选择。 构造方法: public TreeSet() public TreeSet(Collection c) public TreeSet(Comparator c) public TreeSet(SortedSet s),TreeSet类 - 2,练习:构造一个TreeSet,存放一批Integer对象,遍历查看结果。 练习:自定义一个Comparator比较器,存放Integer对象,实现简单倒序排列。,Map结构层次关系,Map.Entry接口 - 1,Map.Entry是Map接口的内部接口,它的功能是:封装一个key/value,也就是说,一个Map.Entry对象就是一个键/值对。每个Map集合元素是一个Map.Entry对象。 成员方法: public K getKey() public V getValue() public V setValue(V value),Map.Entry接口 - 2,成员方法: public boolean equals(Object o) public int hashCode(),Map接口 - 1,Map接口是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。此接口用于代替Java2之前容器类的Dictionary 类,后者完全是一个抽象类,而不是一个接口。 成员方法: public V put(K key,V value) public void putAll(Map t),Map接口 - 2,成员方法: public V get(Object key) public V remove(Object key) public void clear() public int size() public boolean containsKey(Object key) public boolean containsValue(Object value) public boolean isEmpty(),Map接口 - 3,成员方法: public Set entrySet() public Set keySet() public Collection values(),HashMap类 - 1,HashMap是一个基于散列表完成的一个实现品,可以用它来取代Hashtable。 构造方法: public HashMap() public HashMap(int initialCapacity) public HashMap(int initialCapacity,float loadFactor) public HashMap(Map m),HashMap类 - 2,练习:构造一个HashMap,加入一些String,用两种方法实现遍历,一是用entrySet方法,一种是用keySet方法。,SortedMap接口 - 1,SortedMap接口是Map接口的子接口,功能是保证集合中键/值对始终处于按键排列“升”序的状态。 成员方法: public Comparator comparator() public K firstKey() public K lastKey(),SortedMap接口 - 2,成员方法: public SortedMap headMap(K toKey) public SortedMap subMap(K fromKey,K toKey) public SortedMap tailMap(K fromKey),TreeMap类 - 1,TreeMap是底层基于树完成的一个Map。当我们遍历它时,会以排序形式出现,次序由Comparable或Comparator比较器决定。 构造方法: public TreeMap() public TreeMap(Map m) public TreeMap(Comparator c) public TreeMap(SortedMap m),TreeMap类 - 2,练习:构造一个TreeMap,存放一批Integer/String对象,遍历查看结果。 练习:自定义一个Comparator比较器,存放Integer对象,实现简单倒序排列。,其它Map接口的实现类,在集合框架中,还有几个Map接口的实现类,请自行参照API文档做练习。 (1)IdentityHashMap (2)WeakHashMap (3)EnumMap (4)ConcurrentMap (5)ConcurrentHashMap,Dictionary类 - 1,Dictionary从字面上理解为“字典”,是一个表示键/值对存储库的抽象类,代表的数据结构为映射。我们可以将给定一个键和值存储到Dictionary对象中。一旦被存储,可以通过它的键映射到它的值。 构造方法: public Dictionary(),Dictionary类 - 2,成员方法: public abstract V put(K key,V value) public abstract V get(Object key) public abstract V remove(Object key) public abstract int size() public abstract boolean isEmpty() public abstract Enumeration keys() public abstract Enumeration elements(),Hashtable类 - 1,Hashtable是原始util包的一部分,是Dictionary的具体实现。当使用Hashtable时,你指定一个对象作为一个键,另外指定一个与那个键关联的值。然后键被散列,相应的散列码用做值存储在表中的索引。 构造方法: public Hashtable() public Hashtable(int initialCapacity),Hashtable类 - 2,构造方法: public Hashtable(int initialCapacity,float loadFactor) public Hashtable(Map t) 成员方法: public boolean isEmpty() public boolean contains(Object value),Hashtable类 - 3,成员方法: public boolean containsKey(Object key) public void clear() public Object clone() 练习:构造Hashtable对象,测试其成员方法。,Properties类 - 1,Properties是属性表,是Hashtable类的一个子类,是一种特殊的映射结构。键和值必须是String。还可以将属性表保存到一个文件,也可以从一个文件那里加载。 构造方法: public Properties() public Properti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论