容器的深入理解

本文介绍了如何在Java中灵活运用ArrayList和LinkedList,以及Collection接口的使用技巧。重点讲解了如何添加元素、判断元素存在、修改List结构和使用不同Map实现。特别提到了避免数组大小调整的陷阱和ListIterator的强大功能。

平时用的List entityList = new ArrayList<> 已经向上转型为List了,需要创建位对应的接口,

当需要使用LinkedList / TreeMap的额外的方法的时候,就不能向上转型

Collection接口概括了序列的概念,存放一组对象的方式

文档中写的:“要确保这个Collection包含指定元素” 考虑到set只有在元素不存在的时候才会添加,在使用ArrayList / 任何种类的List中 .add()只是单纯的把它放进去,因为List不在乎是否重复

添加一组元素

一组元素用:Arrays.asList()来表示(可以接受数组或者用逗号分隔的元素列表,并将其转化为一个List对象)

Collections.addAll()方法可以接受一个Collection对象,但是要确保这个collection对象不能为空

首选方式:

构建一个不包含元素的Collection 然后调用Collections.addAll()这种方式很方便,是首选

当使用Arrays.asList()来当做List,但是这样不好的原因是底层是数组,不可以调整尺寸,如果调用add() / delete() 就会引发去改变数组尺寸的尝试,就会报错 “Unsupported Operation(不支持的操作)”的错误

Collection 在每个槽里面只能保存一个元素。包括List (以特定顺序保存一组元素)和Set(元素不能重复)和 Queue(只允许在容器的一边插入一组元素,另一边移除元素 )

Map可以在一个槽里面保存两个对象,map可以自动调整大小,在map中key _ value的保存顺序并不是他们的插入顺序,因为HashMap实现使用的是一种非常快的算法来控制顺序。

HashMap提供二楼最快的查找技术,没有按照任何明显的顺序来保存其元素。

TreeMap是按照比较结果的升序保存键。

LinkedHashMap是按照插入顺序保存键,同时还保留了HashMap的查询速度。

List

两种类型的List

  1. 基本的ArrayList:底层是数组,查询快,List的中间插入和移除元素时比较慢。查询快的原因是:每一个地址值和value其实是对应的,这样知道了首坐标,目标坐标很好找
  2. LinkedList : 链表:包含了下一个value的地址值,通过较低的代价在List中间进行插入和删除操作,提供了优化的顺序访问,LinkedList在随机访问方面比较慢,但是他的特性集较ArrayList更大。

List允许他在创建后添加元素、移除元素、或者自我调整尺寸。是一种可以修改的序列,可以通过

**.contains()**方法来确定某个对象是否在列表中。

**.remove()**方法用来移除一个对象

**.indexOf()**来发现该对象在List中所处位置的索引编号

**.retainAll()**方法是一种有效的交集操作

**.removeAll()**方法移除List中所有的元素(也是依据equals())

**.set()**方法是在指定的索引处(第一个参数),用第二个参数替换整个位置的元素。

**.addAll()**方法是在初始的List的中间插入一个新的列表,Collection中的addAll()是将Collection追加到末尾

.isEmpty是否为空,空:true 非空:false

.clear

.toArray将任意Collection转化为数组,这是一个重载方法,无参的版本返回的是Object数组,如果穿了目标类型,他将产生指定数据的类型,如果参数数组太小放不下List的所有元素的话,.toArray就会创建一个具有合适尺寸的数组

迭代器

是一个对象,作用是遍历 并选择序列中的对象,迭代器被称为轻量级对象:创建它的代价小,Iterator只能单向移动,所以只能用来:

1):使用方法**iterator()**要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。

2):使用**next()**获得序列中的下一个元素

3):使用**hasNext()**检查序列中是否还有元素。

4):使用**remove()**将迭代器新近返回的元素删除。

ListIterator

ListIterator是一个更加强大的Iterator的子类型,他只能用于各种list类的访问。尽管Iterator只能向前移动,ListIterator可以双向移动。它可以产生相对于迭代器在列表中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值