编程语言
首页 > 编程语言> > Java编程思想笔记(十七)——容器深入研究

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

作者:互联网

感悟

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

笔记

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

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