Java容器

目录

容器的概念

常见的容器介绍

Collection 接口

List与Set接口

 Iterator 接口


容器的概念

容器就好像一个存放对象的仓库,可以将你的东西存放在一个无限制的仓库中,然后要用的时候可以按规律取出来!
概念:
Java容器的主要用途就是用来保存对象,根据对象保存形式的不同,可以将其分为以下两个概念:
1. Collection:保存独立的对象集合,常见的有:List、Set、Queue和已经过时Stack;
2. Map:利用“键值对”来保存对象的容器。

常见的容器介绍

List
List可以将元素保存在特定的序列中。主要有两种类型的List:

ArrayList
它常用于元素的随机访问,但在其中插入和移除元素时较慢。

LinkedList
它通过链表实现存储,提供了优化的顺序访问,所以在对其进行插入和移除操作时相对前者更快,但其在随机访问上却相对较慢。
LinkedList还添加了可以使其用作栈、队列或双端队列(Queue)的方法。
根据两者实现上的不同,很容易根据实际的需要选择使用哪种实现。

Stack
如果你正在考虑使用何种机制来存储对象,则请不用考虑用Stack来实现。

Set
Set不保存重复的元素。有以下几种实现:

HashSet
Set常用来做查找操作,而HashSet专门对快速查找进行了优化,因此通常第一考虑的都是使用HashSet来作为Set的实现。

TreeSet
TreeSet对插入其中的元素进行了升序排序,所以在性能上会比HashSet较慢。

LinkedHashSet
它按照插入的顺序保存元素。

Map
将对象映射到其他对象的能力是Map的主要功能。

HashMap
专门用于快速访问

TreeMap
保证Key始终处于升序排列状态,所以没有前者快。

LinkedHashMap
保持元素插入的顺序不变,同时也通过散列提供了快速访问的能力。

Queue
队列的实现有LinkedList提供支持。

下图是Java容器相互关系的简图:

 

Collection 接口

▪  集合作为容器应该具有的功能(增,删,改,查),
▪ 不一定全有。
▪ 集合的基本操作:增加,删除,判断,取出

List与Set接口

▪ Collection 接口存储一组不唯一,无序的对象
▪ List 接口存储一组不唯一,有序(插入顺序)的对象
▪ Set 接口存储一组唯一,无序的对象
▪ Map接口存储一组键值对象,提供key到value的映射

 List接口的实现类
List
▪ List特点:有序,不唯一(可重复)
▪ ArrayList实现了长度可变的数组,在内存中分配连续的空间。
– 优点:遍历元素和随机访问元素的效率比较高
– 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
▪ LinkedList采用链表存储方式。
– 优点:插入、删除元素时效率比较高
– 缺点:遍历和随机访问元素效率低下

List接口特有的方法
▪ 凡是可以操作索引的方法都是该体系特有方法

 Iterator 接口

▪ 所有实现了Collection接口的容器类都有一个iterator方法用以返
回一个实现了Iterator接口的对象。
▪ Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历
操作。
▪ Iterator接口定义了如下方法:
boolean hasNext(); //判断是否有元素没有被遍历

Object next();//返回游标当前位置的元素并将游标移动到下一个位置
void remove(); //删除游标左面的元素,在执行完next之后该
                       //操作只能执行一次

 ▪ 所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器
完成。迭代器为集合而生,与门实现集合遍历
▪ Iterator是迭代器设计模式的具体实现
▪ Iterator方法
– boolean hasNext():判断是否存在另一个可访问的元素
– Object next():返回要访问的下一个元素
– void remove():删除上次访问返回的对象
▪ 可以使用Iterator遍历的本质是什么?
– 实现Iterable接口
Iterator
▪For-each循环
–增强的for循环,遍历array或Collection的时候相当简便
–无需获得集合和数组的长度,无需使用索引访问元素,无需循环条件
–遍历集合时底层调用Iterator完成操作
▪For-each缺陷
–数组:
▪不能方便的访问下标值
▪不要在for-each中尝试对变量赋值,只是一个临时变量
–集合:
▪不使用Iterator相比,不能方便 的删除集合中的内容
▪For-each总结
–除了简单的遍历并读出其中的内容外,不建议使用增强for
为什么需要ListIterator

▪ 在迭代过程中,准备添加或者删除元素

 ListIterator的作用-解决并发操作异常
▪ 在迭代时,不可能通过集合对象的方法(al.add(?))操作集合中的元素,
▪ 会发生并发修改异常。
▪ 所以,在迭代时只能通过迭代器的方法操作元素,但是Iterator的方法
▪ 是有限的,只能进行判断(hasNext),取出(next),删除(remove)的操作,
▪ 如果想要在迭代的过程中进行向集合中添加,修改元素等就需要使用

▪ ListIterator接口中的方法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值