集合
1. 集合框架:
l 所谓的框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,它包含了实现集合的接口和类;
l 集合框架中不同的集合类有各自不同的数据结构,所以在使用中要根据应用的性能要求来选择不用的集合类;
l 集合类存放在java.util包中,今后进行编程时将大量使用集合类和相关接口;
l 集合框架中的主要接口:
Ø Iterable:迭代器接口;
Ø Collection:类集接口;
Ø List:列表接口;
Ø Set:数据集接口;
Ø Queue:队列
Ø Map:键—值对组合映射表
2. Iterable接口和迭代器
l Iterable接口
Ø 实现该接口允许对象成为“foreach(增强for循环)”语句的目标,即该集合对象允许迭代;
Ø 类集接口Collection是Iterable的子接口,所以所有类集对象可以迭代访问,而映射Map不行;
Ø 方法:
Iterable<T>iterator()
功能:返回一个在一组T类型的元素上进行迭代的迭代器;
l 迭代器是实现了Iterator/ListIterator接口的类的对象,可以通过遍历类集,访问操作其中的每个元素;
l ListIterator扩展了父接口Iterator,允许双向遍历集合,并可以修改和删除元素;
3. Collection接口
类集Collection接口定义的方法:
intsize() boolean isEmpty()
booleancontains(Object o) Iterator<E> iterator()
Object[]toArray() boolean add(E e)
Booleanremove(Object o) void clear()
4. List、Set、Map接口
l List接口扩展了Collection,特点:有序且可重复的;
l Set接口扩展了Collection,特点:无序且不可重复的;
l 映射(map)是一个存储关键字/值对的对象。给定一个关键字,可查询得到它的值,关键字和值都可以是对象。映射不是Collection的子接口,所以本身不能使用迭代器来进行遍历。
5. List容器
l List容器特点:
Ø List容器是有序的collection(也称为序列)。此接口的用户可以对List容器中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。List容器允许插入重复的值,包括null;
Ø 最常用的两个List接口的实现类是ArrayList和LinkedList;
l ArrayList及常用API
Ø ArrayList:底层实现的其实是一个动态数组;
Ø ArrayList类扩展Abstract List并实现了List接口;
Ø 支持可随需增长的动态数组;
Ø ArrayList构造方法:
u ArrayList()
u ArrayList(Collection c)------------传入带数据的序列
u ArrayList(int capacity)-------------初始化序列大小
Ø 常用方法见API
l LinkedList及常用API
LinkedList--------链表(双向);
LinkedList类扩展Abstract SequentialList并实现List接口;
LinkedList提供了一个链表数据结构;
LinkedList有两个构造方法:
LinkedList()
LinkedList(Collection c)
除了继承的方法外LinkedList类中还定义了一些有用的方法用于操作和访问容器中的数据,详见API。
l
6. Map接口
l 映射(map)是一个存储键、值对的对象。给定一个键值,可查询到它的值,键和值都是对象;
l 键必须是唯一的,值可以重复;
l 有些映射可以接收null键和null值,而有的不行;
l 表格中的接口支持映射:
接口 | 描述 |
Map | 映射唯一关键字给值 |
Map.Entry | 描述映射中的元素(关键字/值对)。是Map的一个内部类 |
SortedMap | 扩展Map以便关键字按升序保持 |
l Map接口映射唯一键到值;
l 键是以后用于检索值的对象。给定一个键和一个值,可以存储这个值到一个Map对象中,以后可以使用对应键检索它;
l Map接口定义的方法:
Ø int size()
Ø boolean isEmpty()
Ø boolean containsKey(Object key)
Ø boolean containsValue(Object value)
Ø V get(Object key)
Ø V put(K key,V value)
Ø V remove(Object key)
Ø Collection<V> values()
Ø Set<Map.Entry<K,V>>entrySet()--------返回包含的映射关系的Set视图
l Map.Entry接口代表映射项(键—值对)类型,是Map的嵌套类型;
l Map接口定义的entrySet()方法返回包含映射项Entry的集合(Set),集合中元素是Map.Entry类型;
l Map.Entry接口定义的方法:
Ø K getKey()
Ø V getValue()
Ø V setValue(V value)
l HashMap类是基于哈希表的map接口的实现,并允许使用null键和null值(HashMap默认底层就是一个长度为16的Entry类型的数组)
构造方法:
Ø HashMap()
Ø HashMap(Map m)
Ø HashMap(int capacity)
Ø HashMap(int capacity,float fillRatio)----fillRatio为填充因子,数据占整个表的%多少时,表示表满,通常为0.75
l HashMap实现Map并扩展AbstractMap,本身并没有增加任何新的方法;
l 散列映射不保证它的元素的书顺序,元素加入散列映射的顺序并不一定是它们被迭代读出的顺序;
l TreeMap类通过使用红黑树实现Map接口;
l TreeMap提供按排序顺序存储键/值对的有效手段,同时允许快速检索;
l 不像散列映射,树映射保证它的元素按关键字升序排列;
l TreeMap构造方法:
Ø TreeMap()
Ø TreeMap(Comparator comp)
Ø TreeMap(Map m)
Ø TreeMap(SortedMap sm)
l TreeMap实现SortedMap并且扩展AbstractMap,它本身并没有定义其他方法;
l TreeMap的key存储引用类型数据,需要满足一定的条件
Ø 要么引用类型实现Comparable接口
Ø 要么为该TreeMap容器提供实现Comparator接口的比较器对象
7. Set容器
l Set容器是一个不包含重复元素的Collection,并且最多包含又一个null元素,它和List容器相反,Set容器不能保证其元素的顺序;
l 最常用的两个Set接口的实现类是HashSet和TreeSet;
l HashSet及常用API
Ø HashSet扩展AbstractSet并且实现Set接口;
Ø HashSet使用散列表(哈希表)进行存储;
Ø 构造方法:
u HashSet()
u HashSet(Collection c)
u HashSet(int capacity)
u HashSet(int capacity,float fillRatio)
Ø HashSet没有定义任何超过它父类提供的其他方法;
Ø 散列集合没有确保其元素的顺序呢,因为散列处理通常不参与排序;
l HashSet的内部操作的底层数据是HashMap,只是我们操作的是HashMap的key;
l TreeSet及常用API
l TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快;
l 在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择;
l 构造方法:
TreeSet()
TreeSet(Collection c)
TreeSet(Comparator comp)
TreeSet(SortedSet ss)
l TreeSet的内部操作的底层数据是TreeMap,只是我们操作的是TreeMap的key;
8. Collections类及常用API
l Collections----类集工具类,定义了若干用于类集和映射的算法,这些算法被定义为静态方法:
Ø public static void sort(List<T> list)
Ø public static int binarySearch(List<T> list,T key)
Ø public static void reverse(List<?> list)
Ø public static void shuffle(List<?> list)
Ø public static void swap(List<?> list, int i, int j)
Ø public static <T> void fill(List<? super T> list, T obj)