11 持有对象

11 持有对象

java容器的基本类型
- List
- Set
- Queue
- Map

11.2 基本概念

java容器类库的用途是保存对象,并将其划分为两个不同的概念
1. Collection 一个独立元素的序列,这些元素都服从一条或者多条规则
2. Map 键值对对象,允许使用键值来查找

11.5 List

有两种类型的List
- 基本的ArrayList,长于随机访问,但中间插入和移除元素较慢
- LinkedList,插入删除代价较低,提供了优化的顺序访问,但随机访问较慢

确定某个元素是否属于list会用到equals()方法

11.6 迭代器

迭代器是一个对象,它的作用是遍历并选择序列中的对象,而客户端程序员不必关心改序列的底层结构。
java的iterator只能单向移动,这个iterator只能用来
1. 使用iterator()方法返回一个Iterator
2. 使用next()方法获得序列的下一个元素
3. 使用hasNext()方法检查序列中是否还有元素
4. 使用remove()方法将迭代器最近返回的元素删除

迭代器统一了对容器的访问方式

11.6.1 ListIterator

ListIterator是一个更强大的Iterator的子类型,只能用于对各种List的访问,而且可以双向移动

可以调用listIterator()方法产生一个指向List开始的ListIterator,也可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator

11.7 LinkedList

LinkedList还添加了可以使其做Stack,Queue,和双端队列的方法

11.9 Set

Set具有与Collection完全一样的接口,因此没有额外的功能,实际上Set就是Collection,只是行为不同。

TreeSet将元素存储在红黑树 数据结构中,LinkedHashSet因为查询速度也使用了散列,但又使用列表来维护元素的插入顺序

11.10 Map

Map可以返回它的键的Set,它的值的Collection,或者它的键值对的Set

11.11 Queue

LinkedList实现的Queue接口,因此LinkedList可以作为Queue的一种实现。将LinkedList向上转型为Queue

  • offer()方法将一个元素插入队尾
  • peek()和element()方法将在不移除的情况下返回队头,peek在队尾为空时返回null,element抛出NoSuchElementException异常
  • poll()和remove()方法移除并返回队头,但poll在队列为空时返回null,remove抛出异常

11.11.1 PriorityQueue

优先级队列声明下一个弹出的元素是最重要的元素,
当调用PriorityQueue可以确保当你调用peek(),poll(),remove()方法时,获取的元素是队列中优先级最高的元素

默认的排序是对象在队列中的自然排序,但可以通过提供自己的Comparator()方法来修改这个排序

Integer,String和Character已经内建了自然排序,如果想要在PriorityQueue中使用自己的类,就必须包含额外的功能以产生自然排序,或者提供自己的Comparator

11.12 Collection和Iterator

生成Iterator是将队列与消费者队列的方法连接在一起的耦合度最小的方式,实现Iterator接口只需要实现三个方法,hasNext(),next(),remove()

11.13 Foreach和迭代器

java SE5引入了新的Iterable接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果创建了任何实现了Iterable的类,都可以将它用于foreach语句中

11.14 总结

新程序不应该使用过时的Vector,Hashtable,和Stack

java.util中没有任何公共的Stack接口,因为在java 1.0中设计欠佳的java.util.Stack类占用了这个名字,使用LinkedList产生Stack应自己定义一个Stack

public class Stack<T>{
    private LinkedList<T> storage = new LinkedList<T>();

    public void push(T v){
    storage.addFirst(v)
    }
    public T peek(){
        return storage.getFirst();
    }
    public T pop(){
        return storage.removeFirst();
    }
    public boolean empty(){
        return storage.isEmpty();
    }
    public String toString(){
        return storage.toString();
    }

}

java容器简图

image

  • 只有四种容器:Map,List,Set和Queue
  • 点线框表示接口,实线框表示具体的类
  • 空心箭头表示一个特定的类实线了某个接口
  • 实心箭头表示某个类可以生成箭头指向的类的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值