当前位置:文档之家› 第11章泛型与集合

第11章泛型与集合


Map接口操作
➢ Map接口基本操作: 6.1.1 public V put(K key, V value) public V get(Object key) public V remove(Object key) public void clear() public Set<K> keySet() public Collection<V> values()
用Set对象实现集合操作
➢ 使用Set对象的批量操作方法,可以实现标准集合代数运算。 6.1.1
➢ 假设s1和s2是Set对象,下面的操作可实现相关的集合运算。
s1.addAll(s2):实现集合s1与s2的并运算。 s1.retainAll(s2):实现集合s1与s2的交运算。 s1.removeAll(s2):实现集合s1与s2的差运算。 s1.containAll(s2):如果s2是s1的子集,该方法返回true。
➢ 常用方法如下:
E get(int index)
6.1.1
E set(int index, E element)
void add(int index, E element)
E remove(int index)
int indexOf(Object o)
int lastIndexOf(Object o)
HashSet类
➢ HashSet类用散列方法存储元素,具有最好的存取性能, 6.1.1 但元素没有顺序。
➢ HashSet类的构造方法有: HashSet() 初始容量是16,默认装填因子是0.75。 HashSet(Collection c) HashSet(int initialCapacity)
面向对象程序设计 ——泛型与集合
主要内容
1 泛型介绍 2 集合框架 3 List接口及实现类 4 Set接口及实现类
56.1.1 Queue接口及实现类 6 Map接口及实现类 7 Collections类 8 Stream API介绍
6.1.1
泛型介绍
泛型类型
➢ 泛型(generics)是带一个或多个类型参数(type parameter)的类或接口。6.1.1
集合框架
➢➢基数 流批本组(量操S操tr作作eam)操作
6.1.1
bOpbouobobojelleiecata[dnn]etaafodadAuddrl(tArEaSlylet((C)r)eoalmlec<tEio>n<st?reeaxmte(n) ds E> c)
b<pbouToob>olleieTcaa[dn]netrorfeeaAmumrlrotoavSvyeet(rT(AOe[]lalb(maCje)o<cltEle>oc)tpioanra<le?>llSctr)eam()
操作类型 插入元素 删除元素 返回元素
队首元素操作 addFirst(e) offerFirst(e) removeFirst() pollFirst getFirst() peekFirst()
队尾元素操作 addLast(e) offerLast(e) removeLast() pollLast() getLast() peekLast()
类型擦除
➢ 当实例化泛型类型时,编译器使用一种叫类型擦除(type erasure)的技术转换这些6类.1.1型。在编译时,编译器将清除 类和方法中所有与类型参数有关的信息。
➢ 例如,Node<Integer>被转换成Node,它称为源类型 (raw type)。源类型是不带任何类型参数的泛型类或接 口名。这说明在运行时找不到泛型类使用的是什么类型。
boolean hasNext()
是否有下一个元素
E next()
返回下一个元素
void remove()
删除下一个元素
双向迭代器
➢ List还提供了listIterator()方法返回ListIterator对象。它可以 从前后两个方向遍历线性表6.1.中1 元素。
➢ ListIterator接口定义了多个方法。 boolean hasNext() ,E next(),void remove() boolean hasPrevious(),E previous() int nextIndex(),int previousIndex() void set(E o) void add(E o)
void clear()
6.1.1
List接口及实现类
List接口及实现类
➢ List接口实现一种对象列表的结构。存放在 List中的元素 有一个下标(从0开始),6.1可.1 通过下标访问List中的元素。 List中可以包含重复元素。
bigCities 北京 0
上海 1
广州 2
List基本操作
遍历集合元素
➢ 有多种方法遍历集合中的元素: 6.1.1 • 用简单的for循环 • 用增强的for循环 • 用Iterator和ListIterator迭代器对象
使用迭代器对象
➢ 调用集合对象的iterator()方法可以得到Iterator对象,它称 6.1.1 为迭代器对象。
➢ Iterator接口定义了3个方法。
通配符(?)的使用
➢ 泛型类型本身是一个Java类型,为泛型类型传递不同的类 型参数会产生不同的类型。6.1.1
ArrayList<Object> list1 = new ArrayList<Object>(); ArrayList<String> list2 = new ArrayList<String>();
TreeSet类
➢ TreeSet实现一种树集合,6它.1.1使用红-黑树算法为元素排序。 ➢ 添加到TreeSet中的元素必须是可比较的,即元素的类必须
实现Comparable<T>接口。
➢ 构造方法如下。 TreeSet() TreeSet(Collection c) TreeSet(Comparator c)
List<E> subList(int from, int to)
ArrayList类
➢ ArrayList类实际上实现了一个变长的对象数组,其元素可 6.1.1 以动态地增加和删除。它的定位访问时间是常量时间。
➢ ArrayList的构造方法如下: ArrayList() ArrayList(Collection c) ArrayList(int initialCapacity)
bdoeofaleualtnbcooonlteaainsr(eOmbojevcetIfo(P) redicate<? super E> filter)
bboooolleeaannicsEomntpatiny(s)All(Collection<?> c)
ibnot osilzeea(n) retainAll(Collection<?> c)
ArrayDeque和LinkedList类
➢ ArrayDeque类和LinkedList类是Deque的实现类,前者是可 6.1.1 变数组的实现,后者是线性链表的实现。
6.1.1
Map接口及实现类
Map接口操作
➢ Map是用来存储“键/值”对的对象。在Map中存储的关键字 6.1.1 和值都必须是对象,并要求关键字是唯一的,而值可以重 复。
➢ 尽管String是Object的子类,但ArrayList<String>并不是 ArrayList<Object>的子类型。
通配符(?)的使用
➢ 把一个List<String>对象传递给一个需要List<Object>对象 6.1.1 的方法,将会产生一个编译错误。
public static void printList(List<?> list){ for(Object element : list){ System.out.println(element); }
数组转换为List对象
➢ java.util.Arrays类提供了一个asList()方法,它将数组转 6.1.1 换成List对象,定义如下: public static <T> List<T> asList(T… a)
6.1.口的常用实现类有:HashSet类、TreeSet类。 6.1.1
➢ 例如,如果要在Node对象中存放Integer对象,就需要在 创建Node对象时为其传递Integer类型参数。
➢ 要实例化泛型类对象,也使用new运算符,但在类名后面 需加上要传递的具体类型。
Node<Integer> intNode = new Node<Integer>();
泛型方法
➢ 泛型方法(generic method)是带类型参数的方法。类 的成员方法和构造方法都6可.1.1以定义为泛型方法。
E element()
操作失败抛出异常
boolean offer(E e) E poll() E peek()
操作失败不抛出异常
Queue接口和Deque接口
➢ Deque接口实现双端队列,它支持从两端插入和删除元素, 它同时实现了Stack和Queu6.e1.的1 功能。
➢基本操作方法,如下表所示。
Map实现类
➢ HashMap、TreeMap和Hashtable类。 6.1.1
➢ HashMap类以散列方法存放“键/值”对 HashMap() HashMap(int initialCapacity) HashMap(Map m)
➢ TreeMap类保证Map中的“键/值”对按关键字升序排序。 TreeMap() TreeMap(Comparator c)
相关主题