高级程序设计语言(Java版)11-集合框架_第1页
高级程序设计语言(Java版)11-集合框架_第2页
高级程序设计语言(Java版)11-集合框架_第3页
高级程序设计语言(Java版)11-集合框架_第4页
高级程序设计语言(Java版)11-集合框架_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、11.1 基本概念 27011.2 基本的集合接口27011.3 集合(Set)27211.4 列表(List)27511.5 映射(Map) 27811.6 枚举(Enumeration)和迭代(Iterator)11.7 习题集合框架可以理解为一个容器,该容器主要指映射(map)、集合(set)、数组(array)列表(list)等抽象数据结构。该框架均提供有相应的API,而且该框架的Java类还封装了这些抽象数据结构的实现,很大的减轻了程序员编程时的负担。从本质上来说,Java集合框架的主要组成是用来操作对象的接口。不同接口描述不同的数据类型。因此,理解了接口也就理解了Java集合框架。

2、 Java集合框架所提供的核心接口之间的分类和继承关系如图11-1 Collection接口和图11-2 其他类型接口所示:CollectionListSetLinkListArrayListHashSetTreeSetMapHashMapTreeMapEnumerationIteratorArraysJava.lang.ComparableCollections图11-2 其他类型接口图11-1可以看出,Collection接口是最基本的接口,它定义了List和Set,List又定义了LinkList和ArrayList,Set定义了HashSet和TreeSet。图11-2中的接口与图11

3、-1中的Collection接口没有任何继承关系,这些接口都包括了Map,Enumeration,Iterator,Arrays等数据结构。下面对其进行简要的介绍:Collection 接口: 用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。List接口: List 接口继承了Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。 LinkedList类:LinkedList类添加了一些处理列表两端元素的方法; ArrayList类:ArrayList类封装了一个动态再分配的Object数组;Set

4、接口: Set 接口继承Collection 接口,而且它不允许集合中存在重复项,每个具体的Set 实现类依赖添加的对象的equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。 HashSet类:HashSet(): 构建一个空的哈希集; TreeSet类:TreeSet():构建一个空的树集;Map接口: Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value pairs)。该接口描述了从不重复的键到值的映射。 HashMap类:为了优化HashMap空间的使用,您可以调优初始容量和负载因子

5、; TreeMap类:TreeMap没有调优选项,因为该树总处于平衡状态。Iterator 接口: Collection 接口的iterator()方法返回一个Iterator。Iterator接口方法能以迭代方式逐个访问集合中各个元素,并安全的从Collection 中除去适当的元素。 Set接口是Collection的子接口,Set接口没有提供新增的方法,但实现Set接口的容器中元素是没有顺序的且不可以重复。Set容器可以与数学中的“集合”概念相对应。JDK中提供的实现Set接口的类有HashSet、TreeSet等。1. HashSet HashSet是专门为快速查询而设计的一个Set接

6、口的实现类,它使用散列表作为存储结构。散列表通过使用散列映射机制来新增、删除和存取集合对象元素的执行效率。2. TreeSet TreeSet是SortedSet接口的一个实现类。TreeSet的主要特点是采用红黑树结构作为存储结构。在存储了大量需要进行快速检索的排序信息情况下,TreeSet是一个很好的选择。【实例11-1】HashSetTest.javaimport java.util.HashSet;import java.util.Iterator;public class HashSetTest public static void main(String args) HashSet

7、 myset = new HashSet();myset.add(Hello);myset.add(World);myset.add(my);myset.add(friend);Iterator it = myset.iterator();while (it.hasNext()System.out.print(it.next() + );System.out.println();myset.remove(How);myset.add(!);it = myset.iterator();while (it.hasNext()System.out.print(it.next() + );运行结果:W

8、orld my friend Hello ! World my friend Hello【实例11-2】TreeSetTest.javaimport java.util.TreeSet;class TreeSetTest public static void main(String args) TreeSet ts = new TreeSet();ts.add(new Student(张三, 23);ts.add(new Student(李四, 29);ts.add(new Student(王五, 25);ts.add(new Student(赵六, 24);System.out.printl

9、n(ts);class Student implements Comparable private int age;private String name;Student(String name, int age) this.age = age; = name;public int compareTo(Object obj) Student stu = (Student) obj;int num = new Integer(this.age).compareTo(new Integer(stu.age);return num = 0 ? pareTo() :

10、num;public int getAge() return age;public String toString() return name + : + age;运行结果:张三:23, 赵六:24, 王五:25, 李四:29 List接口扩充了Collection,声明了一个允许有重复元素的有序集合。它以线性方式存储元素,当要插入一个新元素时,将其放在列表的末尾。当从表中删除一个元素时,其后的元素会被前移,即List接口是以插入的先后次序来放置元素。实现List接口的常用类有LinkedList、ArrayList、Vector、Stack。1. LinkedList LinkedList是

11、List接口的双向链表实现。它允许存储包括null在内的所有元素。其内部实现是列表,它适用于在链表中间需要频繁进行插入和删除操作的应用。2. ArrayList Arraylist是List接口的实现,支持大小可变的数组,它允许存储包括null在内的所有元素。其存储元素的方式类似数组,元素使用索引位置依序存入,只需将元素插入ArrayList对象,并且不用事先声明ArrayList对象的容量。【实例11-3】LinkedListTest.java import java.util.LinkedList;public class LinkedListTest LinkedList linkLis

12、t = new LinkedList();public void push(Object object) linkList.addFirst(object);public boolean isEmpty() return linkList.isEmpty();public void clear() linkList.clear();public Object pop() if (!linkList.isEmpty()return linkList.removeFirst();return 栈内无元素;public int getSize() return linkList.size();pub

13、lic static void main(String args) LinkedListTest myStack = new LinkedListTest ();System.out.println(入栈:(1,2,3,4,5,6,7));myStack.push(1);myStack.push(2);myStack.push(3);myStack.push(4);myStack.push(5);myStack.push(6);myStack.push(7);System.out.print(出栈:);for (int i = 0; i 8; i+) System.out.println(my

14、Stack.pop();运行结果:入栈:(1,2,3,4,5,6,7)出栈:7654321栈内无元素【实例11-4】ArrayListTest.javaimport java.util.*;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;class Person String name;int age;public Person(String name, int age) = name;this.age = age;public int getAge()

15、return age;public void setAge(int age) this.age = age;public String getName() return name;public void setName(String name) = name;class Mycomparator implements Comparator public int compare(Object o1, Object o2) Person p1 = (Person) o1;Person p2 = (Person) o2;if (p1.age p2.age)return 1;els

16、ereturn 0; public class ArrayListTest public static void main(String args) ArrayList list = new ArrayList();list.add(new Person(张三, 22);list.add(new Person(李四, 23);list.add(new Person(王五, 24);Comparator comp = new Mycomparator();Collections.sort(list, comp);for (int i = 0; i list.size(); i+) Person

17、p = (Person) list.get(i);System.out.println(p.getName();运行结果:王五李四张三Map接口没有继承Collection接口,它是一种特殊的集合接口。Map提供了一个更通用的元素存储方法。Map中比较常用的实现有:HashMap、TreeMap、LinkedHashMap、EnumMap。1. HashMap HashMap是Map接口的散列表实现,此实现提供所有可选的映射操作,并允许使用null值和null键。2. TreeMap TreeMap是SortedMap接口的一个实现类。它的主要特点是采用红黑树作为底层存储结构,提供了按照键排序

18、的Map存储。【实例11-5】HashMapTest.javaimport java.util.HashMap;public class HashMapTest private static final Integer ONE = new Integer(1);public static void main(String args) HashMap m = new HashMap();char c = 张,张,王,王,王,赵,刘;for (int i = 0; i c.length; i+) Integer freq = (Integer) m.get(ci);m.put(ci, freq =

19、 null ? ONE : new Integer(Value() + 1);System.out.println(不同姓氏有 + m.size() + 个);System.out.println(m);运行结果:不同姓氏有4个赵=1, 王=3, 刘=1, 张=2【实例11-6】TreeMapTest.javaimport java.util.TreeMap;public class TreeMapTest private static final Integer ONE = new Integer(1);public static void main(String args) TreeMap m = new TreeMap();char c = 张,张,王,王,王,赵,刘;for (int i = 0; i c.length; i+) Integer freq = (Integer) m.get(ci);m.put(ci, freq = null ? ONE : new Integer(Value() + 1);System.out.println(不同姓氏有 + m

温馨提示

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

最新文档

评论

0/150

提交评论