文章插图
翻译成代码,就和一开始的 Iterator 迭代器遍历方式基本相同了 。
Iterator iter = list.iterator;while (iter.hasNext) {Integer num = iter.next;System.out.println(num);}
还有更深层次的探讨:为什么要设计两个接口 Iterable 和 Iterator,而不是保留其中一个就可以了 。关于 Iterator 和 Iterable 的讲解告一段落,下面来总结一下它们的重点:
简单讲解:Iterator 的保留可以让子类去实现自己的迭代器,而 Iterable 接口更加关注于 for-each 的增强语法 。具体可参考:Java 中的 Iterable 与 Iterator 详解
- Iterator 是提供集合操作内部对象的一个迭代器,它可以遍历、移除对象,且只能够单向移动 。
- Iterable 是对 Iterator 的封装,在 JDK 1.8 时,实现了 Iterable 接口的集合可以使用增强 for 循环遍历集合对象,我们通过反编译后发现底层还是使用 Iterator 迭代器进行遍历 。
ListIterator 存在于 List 集合之中,通过调用方法可以返回起始下标为 index的迭代器:
List<Integer> list = new ArrayList<>;// 返回下标为0的迭代器ListIterator<Integer> listIter1 = list.listIterator;// 返回下标为5的迭代器ListIterator<Integer> listIter2 = list.listIterator(5);
ListIterator 中有几个重要方法,大多数方法与 Iterator 中定义的含义相同,但是比 Iterator 强大的地方是可以在任意一个下标位置返回该迭代器,且可以实现双向遍历 。public interface ListIterator<E> extends Iterator<E> {booleanhasNext;E next;booleanhasPrevious;E previous;intnextIndex;intpreviousIndex;voidremove;// 替换当前下标的元素,即访问过的最后一个元素voidset(E e);voidadd(E e);}
Map 和 Collection 接口Map 接口和 Collection 接口是集合框架体系的两大门派,Collection 是存储元素本身,而 Map 是存储 <key, value> 键值对,在 Collection 门派下有一小部分弟子去偷师,利用 Map 门派下的弟子来修炼自己 。
是不是听的一头雾水哈哈哈,举个例子你就懂了:HashSet 底层利用了HashMa,TreeSet底层用了TreeMap,LinkedHashSet底层用了LinkedHashMap 。
下面我会详细讲到各个具体集合类哦,所以在这里,我们先从整体上了解这两个门派的特点和区别 。
文章插图
Map 接口定义了存储的数据结构是 < key, value> 形式,根据 key 映射到 value,一个 key 对应一个 value,所以 key 不可重复,而 value 可重复 。
在 Map 接口下会将存储的方式细分为不同的种类:
- SortedMap 接口:该类映射可以对 <key, value> 按照自己的规则进行排序,具体实现有 TreeMap
- AbsractMap:它为子类提供好一些通用的 API 实现,所有的具体 Map 如 HashMap 都会继承它
- 添加方法:add(E e) / addAll(Collection<? extends E> var1)
- 删除方法:remove(Object var1) / removeAll(Collection<?> var1)
- 查找方法:contains(Object var1) / containsAll(Collection<?> var1);
- 查询集合自身信息:size / isEmpty
- ···
- Set 接口:一个不允许存储重复元素的无序集合,具体实现有 HashSet / TreeSet···
- List 接口:一个可存储重复元素的有序集合,具体实现有 ArrayList / LinkedList···
- Queue 接口:一个可存储重复元素的队列,具体实现有 PriorityQueue / ArrayDeque···
文章插图
Map 集合体系详解
Map 接口是由 <key, value> 组成的集合,由key映射到唯一的 value,所以Map 不能包含重复的 key,每个键至多映射一个值 。下图是整个 Map 集合体系的主要组成部分,我将会按照日常使用频率从高到低一一讲解 。
不得不提的是 Map 的设计理念:定位元素的时间复杂度优化到 O(1) 。
Map 体系下主要分为 AbstractMap 和 SortedMap两类集合 。
AbstractMap 是对 Map 接口的扩展,它定义了普通的 Map 集合具有的通用行为,可以避免子类重复编写大量相同的代码,子类继承 AbstractMap 后可以重写它的方法,实现额外的逻辑,对外提供更多的功能 。
推荐阅读
- 已有两种太空探测器飞出我们的太阳系 飞往太阳系外的探测器
- 生科医学|全国疫情形势呈逐渐企稳态势!上海两区首日达到社会面清零目标
- 两只耳朵配不一样的助听器,助听器需要两个耳朵都配吗??
- 前端开发和后端开发的区别?这两者哪个更累?
- 如何将两个pdf合并?合并pdf的快捷方法分享
- 验孕纸两条杠是怎么回事呢
- 喝白酒时,讲究这4个“最佳”,健康饮酒醉得慢,让你多喝二两半
- 减腰两边的赘肉怎么做?
- 水陆两栖动物名字大全 水陆两栖的动物是什么动物
- 花钱学Python?不存在的!一份大纲两个网站外加搜索,足矣