1、北京传智播客教育 ,API-集合,传智风清扬,本章内容,北京传智播客教育 ,集合类概述,为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。 集合类的特点 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。,北京传智播客教育 ,Collection接口概述,Collection接口概述 Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为
2、 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。,北京传智播客教育 ,Collection接口成员方法,boolean add(E e) boolean remove(Object o) void clear() boolean contains(Object o) boolean isEmpty() int size(),北京传智播客教育 ,Collection接口成员方法,boolean addAll(Collection c) boolean removeAll(Collection
3、 c) boolean containsAll(Collection c) boolean retainAll(Collection c),北京传智播客教育 ,Collection接口成员方法,Object toArray() 把集合转成数组,可以实现集合的遍历Iterator iterator() 迭代器,集合的专用遍历方式,北京传智播客教育 ,Iterator接口概述,Iterator接口概述 对 collection 进行迭代的迭代器 依赖于集合而存在,北京传智播客教育 ,Iterator接口成员方法,boolean hasNext() E next(),北京传智播客教育 ,Iterat
4、or接口的使用和原理讲解,Iterator接口的使用讲解 Iterator接口的原理讲解 为什么不定义成一个类,而是一个接口 看源码是如何实现的,北京传智播客教育 ,Collection案例,存储字符串并遍历 存储自定义对象并遍历 Student(name,age),北京传智播客教育 ,List接口概述,List接口概述 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。 与 set 不同,列表通常允许重复的元素。 List案例 存储字符串并遍历 存储自定义对象并遍历,
5、北京传智播客教育 ,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 previous()ConcurrentModificationException 现象 原因 解决方案,北京传智播客教育 ,常见数据结构,栈 队列 数组 链表 树 哈希表,北京传智播客教育 ,ArrayL
6、ist类概述及使用,ArrayList类概述 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 ArrayList案例 存储字符串并遍历 存储自定义对象并遍历,北京传智播客教育 ,Vector类概述及使用,Vector类概述 底层数据结构是数组,查询快,增删慢 线程安全,效率低 Vector类特有功能 public void addElement(E obj) public E elementAt(int index) public Enumeration elements() Vector案例 存储字符串并遍历 存储自定义对象并遍历,北京传智播客教育 ,LinkedList类概述及使用
7、,LinkedList类概述 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 LinkedList类特有功能 public void addFirst(E e)及addLast(E e) public E getFirst()及getLast() public E removeFirst()及public E removeLast() LinkedList案例 存储字符串并遍历 存储自定义对象并遍历,北京传智播客教育 ,List集合练习,ArrayList 去除集合中字符串的重复值(字符串的内容相同) 去除集合中自定义对象的重复值(对象的成员变量值都相同) LinkedList 请用L
8、inkedList模拟栈数据结构的集合,并测试,北京传智播客教育 ,List集合练习1,ArrayList 去除集合中字符串的重复值(字符串的内容相同) 去除集合中自定义对象的重复值(对象的成员变量值都相同) LinkedList 请用LinkedList模拟栈数据结构的集合,并测试,北京传智播客教育 ,泛型概述及使用,JDK1.5以后出现的机制 泛型出现的原因 泛型出现的好处 泛型的书写格式 把前面的集合代码用泛型改进,北京传智播客教育 ,泛型由来,为什么会有泛型呢? 通过案例引入 早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Ja
9、va提供了泛型来解决这个安全问题。,北京传智播客教育 ,泛型应用,泛型类 把泛型定义在类上 格式:public class 类名 注意:泛型类型必须是引用类型 泛型方法 把泛型定义在方法上 格式:public 返回类型 方法名(泛型类型 .) 泛型接口 把泛型定义在接口上 格式:public interface 接口名,北京传智播客教育 ,泛型高级(通配符),泛型通配符 任意类型,如果没有明确,那么就是Object以及任意的Java类了 ? extends E 向下限定,E及其子类 ? super E 向上限定,E及其父类,北京传智播客教育 ,增强for概述及使用,增强for概述 简化数组和C
10、ollection集合的遍历 格式: for(元素数据类型 变量 : 数组或者Collection集合) 使用变量即可,该变量就是元素 好处:简化遍历 注意事项:增强for的目标要判断是否为null 把前面的集合代码的遍历用增强for改进,北京传智播客教育 ,静态导入概述及使用,静态导入概述 格式:import static 包名.类名.方法名; 可以直接导入到方法的级别 注意事项 方法必须是静态的 如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。,北京传智播客教育 ,可变参数概述及使用,可变参数概述 定义方法的时候不知道
11、该定义多少个参数 格式 修饰符 返回值类型 方法名(数据类型 变量名) 注意: 这里的变量其实是一个数组 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个 Arrays工具类中的一个方法 public static List asList(T. a),北京传智播客教育 ,List集合练习2,集合的嵌套遍历 获取10个1-20之间的随机数,要求不能重复 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值,北京传智播客教育 ,Set接口概述,Set接口概述 一个不包含重复元素的 collection。 Set案例 存储字符串并遍历 存储自定义对象并遍历,北京传智播
12、客教育 ,HashSet类概述,HashSet类概述 不保证 set 的迭代顺序 特别是它不保证该顺序恒久不变。 HashSet如何保证元素唯一性 底层数据结构是哈希表(元素是链表的数组) 哈希表依赖于哈希值存储 添加功能底层依赖两个方法: int hashCode() boolean equals(Object obj),北京传智播客教育 ,LinkedHashSet类概述,LinkedHashSet类概述 元素有序唯一 由链表保证元素有序 由哈希表保证元素唯一,北京传智播客教育 ,TreeSet类概述,TreeSet类概述 使用元素的自然顺序对元素进行排序 或者根据创建 set 时提供的
13、Comparator 进行排序 具体取决于使用的构造方法。 TreeSet是如何保证元素的排序和唯一性的 底层数据结构是红黑树(红黑树是一种自平衡的二叉树),北京传智播客教育 ,Set集合练习,HashSet集合存储自定义对象并遍历。 如果对象的成员变量值相同即为同一个对象 TreeSet集合存储自定义对象并遍历 如果对象的成员变量值相同即为同一个对象 按照年龄进行从大到小进行排序 编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台,北京传智播客教育 ,Collection集合总结,Colle
14、ction List ArrayList Vector LinkedList Set HashSet TreeSet,北京传智播客教育 ,Map接口概述,Map接口概述 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构值针对键有效,跟值无关Collection集合的数据结构是针对元素有效,北京传智播客教育 ,Map接口成员方法,V put(K key,V value) V remove(Object
15、key) void clear() boolean containsKey(Object key) boolean containsValue(Object value) boolean isEmpty() int size(),北京传智播客教育 ,Map接口成员方法,V get(Object key) Set keySet() Collection values() Set entrySet(),北京传智播客教育 ,Map集合遍历,方式1:根据键找值 获取所有键的集合 遍历键的集合,获取到每一个键 根据键找值 方式2:根据键值对对象找键和值 获取所有键值对对象的集合 遍历键值对对象的集合,获
16、取到每一个键值对对象 根据键值对对象找键和值,北京传智播客教育 ,HashMap类概述,HashMap类概述 键是哈希表结构,可以保证键的唯一性 HashMap案例 HashMap HashMap HashMap HashMap,北京传智播客教育 ,LinkedHashMap类概述,Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。,北京传智播客教育 ,TreeMap类概述,TreeMap类概述 键是红黑树结构,可以保证键的排序和唯一性 TreeMap案例 HashMap HashMap,北京传智播客教育 ,Map集合案例,“aababcabcdabcde“,获取字符串中每一个字母出现
17、的次数要求结果:a(5)b(4)c(3)d(2)e(1) 集合的嵌套遍历 HashMap嵌套HashMap HashMap嵌套ArrayList ArrayList嵌套HashMap,北京传智播客教育 ,面试题,HashMap和Hashtable的区别 List,Set,Map等接口是否都继承子Map接口,北京传智播客教育 ,Collections类概述和成员方法,Collections类概述 针对集合操作 的工具类 Collections成员方法 public static void sort(List list) public static int binarySearch(List list,T key) public static T max(Collection coll) public static void reverse(List list) public static void shuffle(List list),北京传智播客教育 ,Collections成员方法的使用,模拟斗地主洗牌和发牌 模拟斗地主洗牌和发牌 对牌进行排序 并同时使用Map,List,Set等集合,可以知道什么时候使用哪种集合,北京传智播客教育 ,集合总结,集合 Collection List Set Map,北京传智播客教育 ,