Java编程思想笔记(十七)——容器深入研究

感悟

本章可以说是编写耗时最长的,不光是因为本章内容比较枯燥晦涩,同时也是本人经历了人生两件大事,一有空就回头来补了。容器可以说是开发中使用最频繁的类库之一,掌握好这个工具对于面向对象的开发如虎添翼,需要日积月累进行反复学习巩固。

笔记
  • 17.1 完整的容器分类法
    在这里插入图片描述
对整体容器有初步概念,知道自己使用的容器属于哪个位置
  • 17.2 填充容器
    1)一种Generator解决方案
    2)Map生成器
    3)使用Abstract类
1、引出Collections.nCopies()和Collection.fill(),都是静态方法且针对List,适用性不足
2、所有的Collection子类型都有一个接收另一个Collection对象的构造器,通过适配器模式,引出Generator一种解决方案。
3、Map额外需要一个Pair类作为信使,然后使用2中的方案
4、定制容器类,通过每个容器的Abstract类,进行创建定制容器。示例结合享元模式,演示定制Map继承AbstractMap并实现entrySet(),定制Set继承AbstractSet并实现iterator()和size()。
  • 17.3 Collection的功能方法
1、列举了Collection所有操作方法,包括Set和List但是不包括Map。其中不包括get()方法获取随机元素(因为set内部自己维护顺序),访问元素需要用迭代器。
2、结合实例演示了Collection基本操作方法,值得反复参考。
  • 17.4 可选操作
    1)未获支持的操作
1、了解可选操作的含义,
2、了解未或支持的操作UnsupportedOperationException
  • 17.5 List的功能方法
1、掌握基本用法就好,具体使用中再慢慢体会
2、LinkedList可当做队列来用
  • 17.6 Set和存储顺序
    1)SortedSet
1、理解Set接口和实现类HashSet、TreeSet、LinkedHashSet之间的区别,同时区别容器中元素需要相应实现hashCode()、equals()和Comparable接口,可以说是重点。
2、SortedSet是接口,使元素处于排序。compartor()返回当前Set使用的Comparator,如果返回null则以自然方式排序。
  • 17.7 队列
    1)优先级队列
    2)双向队列
1、示例演示了LinkedList、PriorityQueue、ArrayBlockQueue、ConcurrentLinkedQueue、LinkedBlockingQueue、PriorityBlockQueue,方便在不同场景中使用。
2、优先级队列不同于其他队列,需要实现Comparable。
3、双向队列不常用,这里主要理解用LinkedList实现就好。
  • 17.8 理解Map
    1)性能
    2)SortedMap
    3)LinkedHashMap
1、映射表又称关联数组,是维护键-值关联
2、都需要有equals(),散列map需要有hashCode()
3、正常情况下不需要考虑性能,HashMap是首选也是性能最好的、LinkedHashMap会保存存入顺序(支持最近最少使用LRU算法),TreeMap实现Comparable或Comparator支持排序、ConcurrentHashMap并发中线程安全。
4、示例了Map的基本用法,这里重点学习。
5、同SortedSet一样,SortedMap接口实现排序,其中实现类对应TreeMap
  • 17.9 散列与散列码
    1)理解hashCode()
    2)为速度而散列
    3)覆盖hashCode()
1、示例HashMap容器要用自己创建的类元素,需要同时覆盖equals()和hashCode(),这个要多多理解,一个是值比对,一个是散列码生成比对。equals()实现中要注意5个条件,这个可以先照搬例子就好,注意考虑null的情况。 o instanceof Groundhog
2&& (number == ((Groundhog2)o).number);
2、结合示例,很好的解释了hashCode()的由来,hashCode()的好处,以及覆盖hashCode()注意事项(基于对象内容进行生成)
  • 17.10 选择接口的不同实现
    1)性能测试框架
    2)对List的选择
    3)微基准测试的危险
    4)对Set的选择
    5)对Map的选择
本节了解就好,不用特别去记如何测试和性能如何,关键还是了解思路和使用策略。当你真正需要考虑性能的时候,回头来看是不错的选择。
  • 17.11 实用方法
    1)List的排序和查询
    2)设定Collection或Map为不可修改
    3)Collection或Map的同步控制
1、记一些常用的Collections方法,max、min、reverse、copy、shuffled等其他方法可以需要用的时候再进行参考。
2、了解List的排序查询和不可修改方法的作用。
3、了解并发同步控制。
4、取得迭代器后,又往容器里塞元素,引发ConcurrentModificationException。
  • 17.12 持有引用
    1)WeakHashMap
本节涉及到Java的垃圾回收,大对象内存耗尽的时候使用,平时使用频率较低,可以后续回来回顾。
  • 17.13 Java 1.0/1.1的容器
    1)Vector和Enummeration
    2)Hashtable
    3)Stack
    4)BitSet
你因该舍弃不用的容器类,已经有更好的替代方案,了解即可。
  • 17.14 总结
    容器类库是面向对象语言的核心,学习掌握非常重要,需要反复回顾
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值