学习笔记(八)对象的集合(三)

来源:互联网 发布:d3.js 中文官网 编辑:程序博客网 时间:2024/06/07 13:05

《Java编程思想》整理的一些学习笔记,有不对的地方,欢迎指出。
1.容器的分类法。为满足变成的需求,Collection和Map有多种不同的实现(即有多种子类),常用的有Collection包含List,Set。其中List作为接口又被ArrayList和LinkedList等子类实现,Set作为接口又被HashSet等子类实现。Map被HashMap等子类实现。即与持有对象有关的接口是Collection、List、Set和Map。通常希望代码只与这些接口打交道,这样有利于降低耦合度,实现开闭原则。因此一般是:List list = new ArrayList();,所有Collection都能通过iterator()方法生成Iterator。
2.Collection的功能方法。
1)boolean add(Object):确保容器持有此参数,如果没有将此参数添加进容器,则返回 false(“可选的”)。
2)boolean addAll(Collection):添加参数中的所有元素,只要添加了任意元素就返回true(“可选的”)。
3)void clear():移除容器中所有的元素(“可选的”)。
4)boolean contains(Object):如果容器已经持有此参数,则返回true。
5)boolean containsAll(Collection):如果容器持有此参数中的所有元素,则返回true。
6)boolean isEmpty():容器中没有元素时返回true。
7)Iterator iterator():返回一个Iterator,可以用来遍历容器中的元素。
8)boolean remove(Object):如果参数在容器中,则移除此元素的一个实例。如果做了移除动作,则返回true。
9)boolean removeAll(Collection):移除参数中所有的元素,发生移除动作就会返回true。
10)boolean retainAll(Collection):只保存参数中的元素,只要Collection发生了改变就返回true。
11)int size():返回容器中元素的数目。
12)Object[] toArray(): 返回一个数组,该数组包含容器中的所有元素。
13)Object[] toArray(Object[] a):返回一个数组,该数组包含容器中所有的元素,其类型与数组a的类型相同,而不是单纯的Object(必须对此数组做类型转换)。
3.List的功能方法。
get()方法是List特有的,获取单个元素,Collection没有。
1)List(interface):次序是List的最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。
2)ArrayList:由数组实现的List。它允许对元素进行快速的随机访问,但是向List中间插入与移除元素的速度很慢。ListIerator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素——因为这比LinkedList开销要大得多。
3)LinkedList:对顺序访问进行了优化,向List中间插入与移除的开销并不大,随机访问则相对较慢。(需要后一种功能可用ArrayList代替。)还具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()和removeLast(),这些方法使得LinkedList可以当作堆栈、队列和双向队列使用。
4.Set的功能方法。
1)Set(interface):存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
2)HashSet*:为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。
3)TreeSet:保存次序的Set,底层为树的结构。使用它可以从Set中提取有序的序列。
4)LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

0 0
原创粉丝点击