只剩下2个部分,这次学习了容器的用法.
概述
1.容器是程序中非常重要的东西,只有精通容器的用法才能掌握代码的良构.
2.容器的声明要用合适的泛型,理论上讲最宽广的类型作为声明最好,但事实为了方便阅读,必须要考虑合理的声明类型.
3.容器的特点.
3.1容器可以在创建后更改大小.
3.2容器可以有序或者无序.有序也有两种情况,根据添加先后排序,根据比较器排序.
3.3容器有唯一性,对象只知道容器对象,而不需要知道里面的每个元素
3.4容器可以通过循环迭代的方式做操作.
3.5当元素过多的时候,应该设计成map或者set.特别是list在某些时间应该改成set.但要注意如何处理重复元素.
接口:只摘要关键,重要.
1.数组:最简单,但最不灵活,在简单的操作下可以比其他容器快10倍速度.
2.Iterable 增加了迭代的功能,以及迭代时的修改
3.Collection 增加了add等修改功能.比较有意思的是增加了交集,并集和差集的操作.里面的并集用在安全副本上非常合适.
4.List 有序,按照添加的先后排序.ArrayList访问快,修改慢.LinkedList修改快,访问慢
5.Set 无序非重复.有意思的是在HashSet的构造方法里可以添加list,这样就可以去除list里的重复元素
SortedSet可以按照比较器排序,他的实现类是treeSet.
6.Map 通过键值对来存储数据.键必须唯一.Value如果没用泛型的话,取出来后要强转.
有意思的是Map用在可变状态上非常合适.
HashMap是最简单,效率也最高的,多用于查找.
实现类
1.每次选择的时候先选择最简单的,最后根据经验优化
2.任何容器在面对大规模遍历时表现都差不多,这时候应该考虑用更好的算法.
3.Collections是工具类,主要用于对于list排序,可以添加比较器参数来排序.
比较有意思的是,这里可以用比较器的匿名内部类.
还可以设置不可修改的容器,用于安全副本.
单元素容器和空容器,不知道有什么用.
继承接口的问题
为了获得接口的方法而选择继承接口是会暴露不必要的方法,应该选择使用委派.
概述
1.容器是程序中非常重要的东西,只有精通容器的用法才能掌握代码的良构.
2.容器的声明要用合适的泛型,理论上讲最宽广的类型作为声明最好,但事实为了方便阅读,必须要考虑合理的声明类型.
3.容器的特点.
3.1容器可以在创建后更改大小.
3.2容器可以有序或者无序.有序也有两种情况,根据添加先后排序,根据比较器排序.
3.3容器有唯一性,对象只知道容器对象,而不需要知道里面的每个元素
3.4容器可以通过循环迭代的方式做操作.
3.5当元素过多的时候,应该设计成map或者set.特别是list在某些时间应该改成set.但要注意如何处理重复元素.
接口:只摘要关键,重要.
1.数组:最简单,但最不灵活,在简单的操作下可以比其他容器快10倍速度.
2.Iterable 增加了迭代的功能,以及迭代时的修改
3.Collection 增加了add等修改功能.比较有意思的是增加了交集,并集和差集的操作.里面的并集用在安全副本上非常合适.
4.List 有序,按照添加的先后排序.ArrayList访问快,修改慢.LinkedList修改快,访问慢
5.Set 无序非重复.有意思的是在HashSet的构造方法里可以添加list,这样就可以去除list里的重复元素
SortedSet可以按照比较器排序,他的实现类是treeSet.
6.Map 通过键值对来存储数据.键必须唯一.Value如果没用泛型的话,取出来后要强转.
有意思的是Map用在可变状态上非常合适.
HashMap是最简单,效率也最高的,多用于查找.
实现类
1.每次选择的时候先选择最简单的,最后根据经验优化
2.任何容器在面对大规模遍历时表现都差不多,这时候应该考虑用更好的算法.
3.Collections是工具类,主要用于对于list排序,可以添加比较器参数来排序.
比较有意思的是,这里可以用比较器的匿名内部类.
还可以设置不可修改的容器,用于安全副本.
单元素容器和空容器,不知道有什么用.
继承接口的问题
为了获得接口的方法而选择继承接口是会暴露不必要的方法,应该选择使用委派.