学完java编程思想持有对象一章,对容器概念以及常用方法做一个简单的总结,不涉及代码示例。
1.数组与容器的区别
共同点:都可以保存对象。
不同点:
数组:具有固定的尺寸。
容器:自动调整自己的尺寸。
2.基本概念
java容器类类库的用途是保存对象,并将其划分为两个概念
1)Collection:一个独立的元素序列,这些元素都服从一条或多条规则,保存单一的元素。
2)Map:一组成对的键值对对象,允许使用键来查找值。
3.添加一组元素
1)Arrays.asList方法接收一个数组或是一个用逗号分隔的元素列表(可变参数),并将其转化为List对象。在这种情况下,其底层表示的是数组,不能调整尺寸,试图使用add(),delete(),运行时会报“Unsupported Operation”-不支持操作。
2)Collections.addAll()方法接受一个Collection对象以及一个数组或是一个逗号分割的列表。
4.List集合
1)ArrayList:底层是组数结构,长于随机访问元素,但是在List的中间插入和移除元素较慢。
2)LinkedList:底层是链表结构,通过代价较低的在List中间插入和移除元素操作,提供了优化的顺序访问。
常用方法:shuffle():对列表随机排序。clear(),removeAll():清空元素列表,返回[]。contains():确定某个对象是否在列表中。remove():移除元素。indexOf():通过对象引用查找元素在列表中的索引编号。add():添加元素。subList():①返回的是父List的一个视图-即子表,在方法里输入参数(from,to),从索引from开始,截取(to-from)个元素形成新子表List。②非结构性修改(长度没有变化),父子表相互影响。 ③结构性修改,子表修改对父表有效,父表修改对子表,运行会报错。
3)LinkedList还添加了可以使用栈,队列或双端队列的方法。(可引用LinkedList,向上转型为Queue)。各种Queue以及栈的行为,由LinkedList提供技术支持。
5.迭代器
迭代器是一个对象,他的工作是遍历并选择序列中的集合,而客户端程序员不需要关系序列底层结构。统一了对容器的访问方式。
java的Iterator只能单向移动,用来:
1)使用iterator()返回一个Iterator对象。
2)使用next()获得序列中的下一个元素。
3)使用hasNext()检查序列中是否还是元素。
4)使用remove()将迭代器next()新近返回的元素删除。在调用之前必须先调用next()。
5.1 ListInterator是一个更加强大的Interator的子类型。只能用于各种List的访问,可以双向移动,nextIndex(),previousIndex(),产生当前位置前后元素的索引。并可用set(),替换他访问过的最后一个元素。
6.Stack
通常是指先进后出的容器。
常用方法:push():接收对象。peek():返回栈顶元素但并不从栈顶移除,pop():移除并返回栈顶元素。
7.Set
具有与Collection相同的接口,不保存重复的元素,随机插入。HashSet:提供最快的查询速度。TreeSet:将元素储存在红-黑数据结构中,对结果升序排序(按字典顺序排序,如果想按照字母排序可向TreeSet构造器传入String.CASE_INSENTIVE_ORDER。LinkedHashSet:使用链表维护元素插入顺序,并通过散列提高查询速度。
8.Map
是一种将对象和对象相关联的设计,HashMap:用来快速访问。TreeMap:保持键始终处于排序状态。LinkedHashMap:保持元素插入的顺序,但也通过散列提供了快速访问能力。
9.Queue
队列是一个典型的先进先出容器。事物插入顺序与取出顺序相同。LinkedList提供了方法以支持队形行为,并且它实现了Queue接口。
常用方法:offer():将一个元素插入到队尾,或者返回false。peek(),element():都将在不移除元素的情况下返回队头元素,前者在队列为空时返回null,后者抛出“NoSuchElementException”异常。poll(),remove():移除并返回队头元素。前者队列为空时返回null,后者抛出“NoSuchElementException”异常。
9.1 ProorityQueue
调用offer()插入对象时,这个对象会在队列中排序。peek(),poll()等方法,获取的元素是队列中优先级最高的元素。
ProorityQueue与Integer、String、Character一起工作,内建了自然排序。例如字母从小大,字符从A-Z。但可以通过在ProorityQueue构造器中输入Collections.reverseOrder()参数,反序排列。
10.Foreach与迭代器
foreach语法主要用于数组和任何Collection对象。
java SE5中引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果创建了任何实现Iterable接口的类都可以用foreach。iterator()返回的是实现了Iterator<String>的匿名内部类的实例。
代码实例:
public class IterableClass implements Iterable {
@Override
public Iterator iterator() {
return new Iterator() {
@Override
public boolean hasNext() {
return false;
}
@Override
public void remove() {
}
@Override
public Object next() {
return null;
}
};
}
}
11.新程序中不宜使用过时的Vector、HashTable、Stack。