ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-02-09 11:29:39  阅读:157  来源: 互联网

标签:容器 Set Java Map 编程 List Collection hashCode 深入研究


感悟

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

笔记

  • 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)#####不可修改方法
    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 总结
    容器类库是面向对象语言的核心,学习掌握非常重要,需要反复回顾

标签:容器,Set,Java,Map,编程,List,Collection,hashCode,深入研究
来源: https://blog.csdn.net/suicuney/article/details/109463656

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有