java编程思想阅读笔记(九)数组和容器

来源:互联网 发布:cf网络异常232怎么回事 编辑:程序博客网 时间:2024/05/01 05:53
    Java编程思想,注重的应该是思想,我怎么笔记记得就是Java语法细节呢,很多例子的设计的思想也都没有写出来,个人感觉还是缺少实际的操作实践参考和分析的缘故吧;而且本身里面很多的设计模式方面的也没有写,是不敢写,怕误了自己,慢慢体会,也算是由浅入深吧。但其实不从设计的角度来谈,毕竟还是逃脱不了纷繁复杂的细节说明。
    数组,书中没有再去细细的分析,而且建议优先使用容器,因为从效率、类型、保存基本类型上看,可能只有在效率上还有些优势,但是在稍微灵活些的实现上,似乎都会有很多限制;个人觉得从其方便性和理解上(从c过来的人)可能更简单直观;数组的赋值,特别是赋以根据自己特定需要的有意义的值,不是那么直接,(也包括容器),需要用Generator类(根据自己的需要而修改产生的)解决(书上给了很好的示例)。最后就是介绍了System.arraycopy()、binarySearch()、Array.asList、CompareTo等实用方法。

    深入容器:可以理解为更好的使用容器,推荐一般默认常用的容器。ArrayList、HashSet、HashMap


    首先比较完整的容器图很好,可以看到我们最常用的List、Set、Queue是继承自Collection,而Map是单独出来的接口,带有Abstract开头的抽象类,方便我们自定义需要的容器,其实最常用的还是原来那张简化图足够了。先说说共性的,常考虑的
   (1)容器填充:fill() addALL() 或者自定义的Generator
   (2)Collection常用方法:书中有张表很详细。注意的是不包括随机访问元素的get()方法(Set是自己维护内部顺序);如clear() contains() remove() iterator()
   (3)UnsupportedOperationException异常:“执行各种不同的添加和移除的方法在Collection接口中都是可选操作”,是特殊的接口定义方法,不保证调用某些方法是有意义的行为,当出现这种没有实际定义的方法是产生异常;这样的好处是防止出现接口爆炸的情况。
   (4)散列(HashCode方法):可以根据需要自己覆盖原有的该方法,也可以利用Object自带的hashcode方法;应该都学过散列的冲突问题,因此可以想到散列值对应的位置存储的该是一个存放引用的列表;相应的就会理解在HashMap中为什么要弄个容量和负载因子的设置了,如果能够估计HashMap的使用量,合理的预先设置会减少再散列以及查找元素带来的性能损耗问题。
   (5)同步控制:容器在①防止多个进程同时修改同一个容器②获取迭代之后(iterator),遍历完之前,的插入、删除等操作都有报错。
   (6)持有引用:主要说了为垃圾回收提供了不同级别的间接提示的Java.lang.ref类库:
    SoftReference(对内存敏感的高速缓存)、WeakReference(“规范映射”,同一个值只有一个存储空间)、PhantomReference(最弱,依赖于ReferenceQueue);
    具体的List、Set、Map的使用,下面的表更有用。


    而对于具体的选择在前面的持有对象里面说的也有,书中在这里使用了个性能测试框架。