集‎合与容‎‎器类

来源:kmgdwlc.com   作者:   发表时间:2020-02-20 15:06:01

早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack 和 Properties 这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。为此,整个集合框架就围绕一组标准接口而设计。

集合框架被设计成要满足以下几个目标。

最基本的集合接口,存储一组不唯一、无序的对象

存储键值对,提供 key 到 value 的映射,key唯一

使用 keySet() 抽取 key 序列,将 map 中的所有keys生成一个 Set。

使用 values() 抽取 value 序列,将 map 中的所有 values 生成一个 Collection。

为什么一个生成 Set,一个生成 Collection?那是因为,key 总是独一无二的,value 允许重复。

Collection 的子接口,通过索引访问元素,存储一组不唯一、有序的对象

数组列表,自动扩容,增长长度为原来的 50%

基于数组,随机访问、遍历效率高,插入删除效率低

基于双向链表,插入删除效率高,随机访问、查找效率低

基于二叉搜索树,查找元素时间复杂度 O(logn)

实现了 SortedMap 接口

不允许 null 键(空指针异常),允许 null 值

键必须唯一,值可以重复,按键值从大到小排列

内部封装了一个 HashMap,HashSet 作为 map 的 key 而存在,value 则是一个类属性

不能添加重复元素,方法添加重复对象时不改变集合返回 false

无序,不按插入顺序,也不按 HashCode 顺序

LinkedHashset

继承自 HashMap,内部加入链表保存元素顺序

基于元素进入集合的顺序或者被访问的顺序排序

继承自 HashTable,实现了 Map 接口

表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串

继承自 Vector ,先进后出

位集合, 按需增长的位向量

每一位的值都是一个 boolean 值 ,占用一 bit(不是一字节)

内部基于 long 数组, 所以 BitSet 的大小为 long 类型大小(64位)的整数倍

Collection 定义了 toArray()、iterator()、size()方法,但并非所有实现类都重写了这些方法,Set 不提供 get 方法,不能使用 size() 方式遍历。

Iterator 接口常用方法

ListIterator 接口常用方法

original:原数组from:原数组的起始位置to:终点位置(不包括)

original:原数组newLength:要复制的长度

StringBuider 中底层数组的扩容使用了 copyOf()

copyOf() 内部是通过 System.arraycopy() 实现的

src:原数组srcPos:原数组起始位置

dest:目标数组destPost:目标数组的起始位置length:复制长度

List 中的 remove 方法使用了 arraycopy()

哈希集合查找元素为时间复杂度为 O(1) 的原理

通过特定的哈希函数,每个对象都有对应的哈希值、

hashcode对应到内存地址:

通过哈希方法,两个不同的元素,获得了相同的哈希值

最常用用的解决办法是拉链法,在同一地址上建立链表来存储多个 hashcode 相同的元素

编辑:

未经授权许可,不得转载或镜像
© Copyright © 1997-2019 by kmgdwlc.com all rights reserved