1 TreeMap容器的使用
(对Key排序——>需要给定排序规则)
(TreeMap和HashMap同样实现了Map接口——>用法来说是没有区别)
(TreeMap 和 TreeSet的区别)
(1 元素自身实现比较规则——>实现Comparable接口——>重写compareto方法)
(2 通过比较器(外部定义)实现比较规则——>实现Comparetor接口——>重写compare方法)
TreeMap和HashMap同样实现了Map接口,所以,对于API的用法来说是没有区别的。HashMap效率高于TreeMap;TreeMap是可以对键进行排序的一种容器,在需要对键排序时可选用TreeMap。TreeMap底层是基于红黑树实现的。
在使用TreeMap时需要给定排序规则:
- 元素自身实现比较规则
- 通过比较器实现比较规则
1.1 元素自身实现比较规则
1.2 通过比较器实现比较规则
1.3 TreeMap 和 TreeSet的区别
2 TreeMap源码分析
(TreeMap是红黑二叉树的典型实现)
(只有在需要排序的Map时才选用TreeMap)
TreeMap是红黑二叉树的典型实现。我们打开TreeMap的源码,发现里面有一行核心代码:
root用来存储整个树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码:
可以看到里面存储了本身数据、左节点、右节点、父节点、以及节点颜色。 TreeMap的put()/remove()方法大量使用了红黑树的理论。在此不再展开。需要了解更深入的,可以参考数据结构里面的笔记
TreeMap和HashMap实现了同样的接口Map,因此,用法对于调用者来说没有区别。HashMap效率高于TreeMap;在需要排序的Map时才选用TreeMap。
1 Iterator接口
(定义了迭代单例集合的标准)
(Collection接口继承了Iterable接口,可以迭代所有Collection接口下的容器)
(3个方法)
1.1 Iterator迭代器接口介绍
Collection接口继承了Iterable接口,在该接口中包含一个名为iterator的抽象方法,所有实现了Collection接口的容器类对该方法做了具体实现。iterator方法会返回一个Iterator接口类型的迭代器对象,在该对象中包含了三个方法用于实现对单例容器的迭代处理。
通过游标遍历
1.3 Iterator接口定义了如下方法:
- //判断游标当前位置的下一个位置是否还有元素没有被遍历;
- //返回游标当前位置的一个元素并将游标移动到下一个位置;
- //删除游标当前位置的元素,在执行完next后该操作只能执行一次;
2 Iterator迭代器的使用
(获取迭代器对象)
(hasNext(),next()——>在for或者while里面使用)
(如果想迭代map——>1 通过map里面的keySet方法获取所有的key,
2 通过Map.entry方法获取所有的键值对对象 ——>这两个方法都是返回set类型)
2.1 迭代List接口类型容器
2.2 迭代Set接口类型容器
2.3 迭代Map接口类型容器——>(对map容器里面的set进行迭代)
3 在迭代器中删除元素
(不要在一次循环中多次调用next方法)
(在迭代时任何操作都不要改变容器长度)
(remove必须在next方法之后使用)
(普通for循环和增强for循环——>都不支持边迭代边删除——>只能使用迭代器)
4 遍历集合的方法总结
1 List——>4种
遍历List方法一:普通for循环——>(size和get方法)
遍历List方法二:增强for循环(使用泛型)——>(不依赖索引的)
遍历List方法三:使用Iterator迭代器(1)——>(实例对象,hasNext(),next()方法)
遍历List方法四:使用Iterator迭代器(2)——>(实例对象,hasNext(),next()方法)
2 Set——>2种
遍历Set方法一:增强for循环
遍历Set方法二:使用Iterator迭代器
3 Map——>2种
遍历Map方法一:根据key获取value
遍历Map方法二:使用entrySet
5 Collections工具类使用
(操作所有容器的工具类)
(提供了对Set、List、Map进行排序、填充、查找元素的辅助方法)
(sort——>排序前提要实现比较规则,前面两种方法)
类 java.util.Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。
Collections工具类的常用方法