- 如果一个程序只包含固定数量的且其生命期都是已知的对象,那么这是一个非常简单的程序
- java实用类库还提供了一套相当完整的容器类来解决这个问题,其中基本类型是List、Set、Queue和Map。这些对象也称为集合类。
- Set对于每个值都只保存一个对象,Map是允许你将某些对象与其他一些对相关连起来的关联数组。Java容器类都可以自动的调整自己的尺寸。
- 通过泛型,就可以在编译器防止将错误类型的对象放置到容器中
- 当你制定了某个类型作为泛型参数时,并不仅限于只能将该确切类型的对象放置到容器中。向上转型也可以向作用于其他类型一样作用与泛型
- Collection:一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序
- Map:一组成对的”键值对“对象,允许你使用键来查找值。
- Collection 是描述所有序列容器的共性的根接口 ,概括了序列的概念,一种存放一组对象的方式。
- List类型:
- ArrayList:长于随机访问元素,但是在List的中间插入和移除元素时较慢
- LinkerList:实现了基本的List接口,但是他执行某些操作,在List的中间插入和移除时比ArrayList更高效,但在随机访问操作方面却要逊色一些。提供了优化的顺序访问
- Set类型:
- HashSet: HashSet是Set的一个实现,他专门对快速查找进行了优化
- TreeSet:存储在红黑树数据结构中,如果你想对结果排序,可以使用TreeSet来代替HashSet
- new TreeSet<String>(String.CASE_INSENSITIVE_ORDER)
- LinkedHashSet:因为查询速度的原因也使用了散列,但是看起来他使用了链表来维护元素的插入顺序
- Map类型:
- HashMap:
- TreeMap:
- LinkedHashMap:
- 迭代器是一个对象,它的工作是便利并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。迭代器通常被称为轻量级对象:创建它的代价小。Java的Iterator只能单向移动,这个Iterator只能:
- 使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素
- 使用next()获得序列中的下一个元素
- 使用hasNext()检查序列中是否还有元素
- 使用remove()将迭代器新近返回的元素删除
- 迭代器统一了对容器的访问方式
- ListIterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问,ListIterator可以双向移动。
- ”栈“通常是指”后进先出“(LIFO)的容易,有时栈也被称为叠加栈,因为最后”压入”栈的元素,第一个”弹出“栈。LinkedList提供了方法以支持栈的行为,并且它实现了Stack接口,因此LinkedList可以用作Stack的实现
- 队列是一个典型的先进先出(FIFO)的容器。LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现。
- 优先级队列声明下一个弹出元素时最需要的元素(具有最高的优先级)。在插入一个对象时,这个对象会在队列中被排序
- java.util.AbstractCollection类提供了Collection的默认实现,使得你可以创建AbstractCollection的子类型。
- foreach可以用于任何Collection对象,只要创建了Iterator,就可以使用foreach
- ArrayList上附着了java.util.RandomAccess接口,而LinkedList则没有