《java编程思想》 第十七章 容器深入研究

11章介绍了java容器类库的概念和基本功能,这些对于使用容器来说已经足够了。这章是更深入的探索这个中来的类库。

下边是java容器类库的简化图:

《java编程思想》 第十七章 容器深入研究_第1张图片

LinkedHashSet可以维护collection插入时的顺序

Arrays.asList()会生成一个list给予固定大小的数组,仅支持那些不会改变数组大小的操作。任何对底层数据尺寸修改的的方法都会抛出UnsupportedOperationException异常。

通过Collection.addAll()方法,生成的新的集合对象则是可以调用所有方法的容器。

关于set集合:Set:首先它不保存重复元素,Set接口不保证维护元素的次序。HashSet:为了快速查找而设计的Set。存入的元素必须定义hashCode()。TreeSet:保持次序的set,底层为树结构,排序的方式是compareTo()。LinkedHashSet:具有HashSet的查询速度,内部使用链表维护元素的顺序(插入次序)。SortedSet:可以保证元素处于排序状态,这使得它通过在sortedSet接口中的下列方法提供附加的功能,Comparator comparator()返回当前Set使用的Comparator;或者返回null,表示以自然方式排序。Queue:仅有的两个实现是LinkedList和PriorityQueue,他们的差异在于排序行为而不是性能。Queue将精确地按照元素被置于Queue中的顺序产生它们。

关于Map:HashMap、TreeMap、LinkedHashMap、WeakHashMap、ConcurrentHashMap、IdentityHashMap。它们的基本接口都是Map,但行为特性各不相同,这表现效率、键值对的保存及呈现次序、对象的保存周期、映射表如何在多线程程序中工作和判定“键”等价的策略等方面。在性能上HashMap因为使用对象的hashCode()进行查询,所以性能很高。LinkedHashMap和HashMap类似,但是在迭代遍历时,顺序为插入次序,迭代查询时速度会更快。TreeMap是基于红黑树的实现。是唯一带有subMap()方法,可以返回一个子树。WeakHashMap:弱键映射,如果映射的没有引用指向某个“键”,则此“键”可以被垃圾收集器回收。CurrentHashMap:一种线程安全的Map,不涉及同步加锁。IndentityHashMap:用“==”取代了“equal”的键比较的散列映射,特殊情况会用。SortedMap:可以使键处于排序状态。这使得它具有额外的功能,这些功能由SortedMap接口提供。在使用散列的数据结构(HashSet、HashMap、LinkedHashMap、LinkedHashSet)时,如果不为你的键覆盖hashCode()和equals()就会无法正确处理你的键。

散列的目的:想要使用一个对象来查找另一个对象。它的价值就在于速度。散列表中得“槽位”通常称为桶位,散列表的数组命名为bucket

总结,容器类库对于面向对象语言来说是这个你要的加某些语言甚至包括内键的基本内容,甚至包含内建的基本的容器构件(列表、映射表和集)

你可能感兴趣的:(java)