第5讲_集合_201602_第1页
第5讲_集合_201602_第2页
第5讲_集合_201602_第3页
第5讲_集合_201602_第4页
第5讲_集合_201602_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、1Java核心技术(上)核心技术(上)主讲:蒋世忠主讲:蒋世忠第5讲 集合类集合类概述 为什么出现集合类?为什么出现集合类?面向对象语言对事物的体现都是以对象的形式,所面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,以为了方便对多个对象的操作,Java就提供了集合就提供了集合类类。 数组和集合类同是容器,有何不同?数组和集合类同是容器,有何不同?数组虽然也可以存储对象,但长度是固定的;集合数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。合只能存储对象。 集合类的特点集合类

2、的特点集合只用于存储对象,集合长度是可变的,集合可集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。以存储不同类型的对象。Collection接口概述 Collection接口概述接口概述Collection 层次结构中的根接口。层次结构中的根接口。Collection 表示表示一组对象,这些对象也称为一组对象,这些对象也称为 collection 的元素。一的元素。一些些 collection 允许有重复的元素,而另一些则不允允许有重复的元素,而另一些则不允许。一些许。一些 collection 是有序的,而另一些则是无序是有序的,而另一些则是无序的。的。Collection

3、接口成员方法1、添加功能:、添加功能: boolean add(E e) boolean addAll(Collection c)2、删除功能、删除功能 boolean remove(Object o) boolean removeAll(Collection c) void clear()3、判断功能、判断功能 boolean contains(Object o) boolean containsAll(Collection c) boolean isEmpty()Collection接口成员方法4、获取功能、获取功能 Iterator iterator()(重点重点)5、长度功能、长度功能

4、 int size():元素的个数元素的个数6、交集功能、交集功能 boolean retainAll(Collection c)7、把集合转换为数组、把集合转换为数组 Object toArray()Iterator接口概述 Iterator iterator()迭代器,集合的专用遍历方式迭代器,集合的专用遍历方式 Iterator接口概述接口概述对对 collection 进行迭代的迭代器进行迭代的迭代器依赖于集合而存在依赖于集合而存在Iterator接口成员方法 boolean hasNext() E next()Iterator接口使用和原理讲解 Iterator接口的使用讲解接口的使

5、用讲解 Iterator接口的原理讲解接口的原理讲解为什么不定义成一个类,而是一个接口为什么不定义成一个类,而是一个接口看源码是如何实现的看源码是如何实现的Collection案例案例 存储字符串并遍历存储字符串并遍历 存储自定义对象并遍历存储自定义对象并遍历Student(name,age)List接口概述接口概述 List接口概述接口概述有序的有序的 collection(也称为序列)。此接口的用户(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置。用户可以根据元素的整数索引(在列

6、表中的位置)访问元素,并搜索列表中的元素。)访问元素,并搜索列表中的元素。与与 set 不同,列表通常允许重复的元素。不同,列表通常允许重复的元素。 List案例案例存储字符串并遍历存储字符串并遍历存储自定义对象并遍历存储自定义对象并遍历List接口成员方法接口成员方法 void add(int index,E element) E remove(int index) E get(int index) E set(int index,E element) ListIterator listIterator()ListIterator接口的成员方法 boolean hasPrevious() E

7、 previous() ConcurrentModificationException现象现象原因原因解决方案解决方案ArrayList类概述及使用类概述及使用 ArrayList类概述类概述底层数据结构是数组,查询快,增删慢底层数据结构是数组,查询快,增删慢线程不安全,效率高线程不安全,效率高 ArrayList案例案例存储字符串并遍历存储字符串并遍历存储自定义对象并遍历存储自定义对象并遍历Vector类概述及使用类概述及使用 Vector类概述类概述底层数据结构是数组,查询快,增删慢底层数据结构是数组,查询快,增删慢线程安全,效率低线程安全,效率低 Vector类特有功能类特有功能publ

8、ic void addElement(E obj)public E elementAt(int index)public Enumeration elements() Vector案例案例存储字符串并遍历存储字符串并遍历存储自定义对象并遍历存储自定义对象并遍历LinkedList类概述及使用类概述及使用 LinkedList类概述类概述底层数据结构是链表,查询慢,增删快底层数据结构是链表,查询慢,增删快线程不安全,效率高线程不安全,效率高 LinkedList类特有功能类特有功能public void addFirst(E e)及及addLast(E e)public E getFirst()

9、及及getLast()public E removeFirst()及及public E removeLast() LinkedList案例案例存储字符串并遍历存储字符串并遍历存储自定义对象并遍历存储自定义对象并遍历List集合练习集合练习 ArrayList去除集合中字符串的重复值去除集合中字符串的重复值(字符串的内容相同字符串的内容相同)去除集合中自定义对象的重复值去除集合中自定义对象的重复值(对象的成员变量值对象的成员变量值都相同都相同) LinkedList请用请用LinkedList模拟栈数据结构的集合,并测试模拟栈数据结构的集合,并测试泛型概述及使用泛型概述及使用 JDK1.5以后出

10、现的机制以后出现的机制 泛型出现的原因泛型出现的原因 泛型出现的好处泛型出现的好处 泛型的书写格式泛型的书写格式 把前面的集合代码用泛型改进把前面的集合代码用泛型改进泛型由来泛型由来 为什么会有泛型呢为什么会有泛型呢?通过案例引入通过案例引入早期的早期的Object类型可以接收任意的对象类型,但是类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在在实际的使用中,会有类型转换的问题。也就存在这隐患,所以这隐患,所以Java提供了泛型来解决这个安全问题。提供了泛型来解决这个安全问题。泛型应用泛型应用 泛型类泛型类把泛型定义在类上把泛型定义在类上格式格式:public cl

11、ass 类名类名注意注意:泛型类型必须是引用类型泛型类型必须是引用类型 泛型方法泛型方法把泛型定义在方法上把泛型定义在方法上格式格式:public 返回类型返回类型 方法名方法名(泛型类型泛型类型 .) 泛型接口泛型接口把泛型定义在接口上把泛型定义在接口上格式格式:public interface 接口名接口名泛型高级泛型高级(通配符通配符) 泛型通配符泛型通配符任意类型,如果没有明确,那么就是任意类型,如果没有明确,那么就是Object以及任意的以及任意的Java类了类了 ? extends E向下限定,向下限定,E及其子类及其子类 ? super E向上限定,向上限定,E及其父类及其父类增

12、强增强for概述及使用概述及使用 增强增强for概述概述简化数组和简化数组和Collection集合的遍历集合的遍历 格式:格式:for(元素数据类型元素数据类型 变量变量 : 数组或者数组或者Collection集合集合) 使用变量即可,该变量就是元素 好处:简化遍历好处:简化遍历 注意事项:增强注意事项:增强for的目标要判断是否为的目标要判断是否为null 把前面的集合代码的遍历用增强把前面的集合代码的遍历用增强for改进改进可变参数概述及使用可变参数概述及使用 可变参数概述可变参数概述定义方法的时候不知道该定义多少个参数定义方法的时候不知道该定义多少个参数 格式格式修饰符修饰符 返回值

13、类型返回值类型 方法名方法名(数据类型数据类型 变量名变量名)注意:注意: 这里的变量其实是一个数组 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个 Arrays工具类中的一个方法工具类中的一个方法public static List asList(T. a)List集合练习集合练习2 集合的嵌套遍历集合的嵌套遍历 获取获取10个个1-20之间的随机数,要求不能重复之间的随机数,要求不能重复 键盘录入多个数据,以键盘录入多个数据,以0结束,要求在控制台输结束,要求在控制台输出这多个数据中的最大值出这多个数据中的最大值Set接口概述接口概述 Set接口概述接口概述一个不包含

14、重复元素的一个不包含重复元素的 collection。 Set案例案例存储字符串并遍历存储字符串并遍历存储自定义对象并遍历存储自定义对象并遍历HashSet类概述类概述 HashSet类概述类概述不保证不保证 set 的迭代顺序的迭代顺序特别是它不保证该顺序恒久不变。特别是它不保证该顺序恒久不变。 HashSet如何保证元素唯一性如何保证元素唯一性底层数据结构是哈希表底层数据结构是哈希表(元素是链表的数组元素是链表的数组)哈希表依赖于哈希值存储哈希表依赖于哈希值存储添加功能底层依赖两个方法:添加功能底层依赖两个方法: int hashCode() boolean equals(Object o

15、bj)LinkedHashSet类概述类概述 LinkedHashSet类概述类概述元素有序唯一元素有序唯一由链表保证元素有序由链表保证元素有序由哈希表保证元素唯一由哈希表保证元素唯一TreeSet类概述类概述 TreeSet类概述类概述使用元素的自然顺序对元素进行排序使用元素的自然顺序对元素进行排序或者根据创建或者根据创建 set 时提供的时提供的 Comparator 进行排序进行排序具体取决于使用的构造方法。具体取决于使用的构造方法。 TreeSet是如何保证元素的排序和唯一性的是如何保证元素的排序和唯一性的底层数据结构是红黑树底层数据结构是红黑树(红黑树是一种自平衡的二叉红黑树是一种自

16、平衡的二叉树树)Set集合练习集合练习 HashSet集合存储自定义对象并遍历。集合存储自定义对象并遍历。如果对象的成员变量值相同即为同一个对象如果对象的成员变量值相同即为同一个对象 TreeSet集合存储自定义对象并遍历集合存储自定义对象并遍历如果对象的成员变量值相同即为同一个对象如果对象的成员变量值相同即为同一个对象按照年龄进行从大到小进行排序按照年龄进行从大到小进行排序 编写一个程序,获取编写一个程序,获取10个个1至至20的随机数,要求的随机数,要求随机数不能重复。随机数不能重复。 键盘录入键盘录入5个学生信息个学生信息(姓名姓名,语文成绩语文成绩,数学成绩数学成绩,英语成绩英语成绩)

17、,按照总分从高到低输出到控制台按照总分从高到低输出到控制台Collection集合总结集合总结 CollectionList ArrayList Vector LinkedListSet HashSet TreeSetMap接口概述接口概述 Map接口概述接口概述将键映射到值的对象将键映射到值的对象一个映射不能包含重复的键一个映射不能包含重复的键每个键最多只能映射到一个值每个键最多只能映射到一个值 Map接口和接口和Collection接口的不同接口的不同Map是双列的是双列的,Collection是单列的是单列的Map的键唯一的键唯一,Collection的子体系的子体系Set是唯一的是唯一

18、的Map集合的数据结构值针对键有效,跟值无关集合的数据结构值针对键有效,跟值无关 Collection集合的数据结构是针对元素有效集合的数据结构是针对元素有效Map接口成员方法接口成员方法 V put(K key,V value) V remove(Object key) void clear() boolean containsKey(Object key) boolean containsValue(Object value) boolean isEmpty() int size()Map接口成员方法接口成员方法 V get(Object key) Set keySet() Collect

19、ion values() SetMap.Entry entrySet()Map集合遍历集合遍历 方式方式1:根据键找值:根据键找值获取所有键的集合获取所有键的集合遍历键的集合,获取到每一个键遍历键的集合,获取到每一个键根据键找值根据键找值 方式方式2:根据键值对对象找键和值:根据键值对对象找键和值获取所有键值对对象的集合获取所有键值对对象的集合遍历键值对对象的集合,获取到每一个键值对对象遍历键值对对象的集合,获取到每一个键值对对象根据键值对对象找键和值根据键值对对象找键和值HashMap类概述类概述 HashMap类概述类概述键是哈希表结构,可以保证键的唯一性键是哈希表结构,可以保证键的唯一性

20、 HashMap案例案例HashMapHashMapHashMapHashMapLinkedHashMap类概述类概述 Map 接口的哈希表和链接列表实现,具有可预接口的哈希表和链接列表实现,具有可预知的迭代顺序。知的迭代顺序。TreeMap类概述类概述 TreeMap类概述类概述键是红黑树结构,可以保证键的排序和唯一性键是红黑树结构,可以保证键的排序和唯一性 TreeMap案例案例HashMapHashMapMap集合案例集合案例 aababcabcdabcde,获取字符串中每一个字获取字符串中每一个字母出现的次数要求结果母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1) 集合的嵌套遍历集合的嵌套遍历HashMap嵌套嵌套HashMapHashMap嵌套嵌套ArrayListArrayList嵌套嵌套HashMap面试题面试题 HashMap和和Hashtable的区别的区别 List,Set,Map等接口是否都继承子等接口是否都继承子Map接口接口Collections类和成员方法类和成员方法 Collections类概述类概述针对集合操作针对集合操作 的工具类的工具类 Collections成员方法成员方法pub

温馨提示

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

评论

0/150

提交评论