一、散列表 Map
散列表概念
1) 容量
散列表中散列数组大小
2) 散列运算
key->散列值(散列数组下标)的算法,如: "mm".hashCode()%10->8
3) 散列桶
散列值相同的元素的”线性集合“
4) 加载因子
就是散列数组加载率,一般小于 75%性能比较理想,就是元素数量/散列数组大小,如:7/10=70%
5) 散列查找
根据 Key 计算散列值,根据散列值(下标)找到散列桶,在散列桶中顺序比较 Key, 如果一样, 就返回 value散列表中 Key 不同, Value 可以重复 。
二、HashMap
HashMap 以键-值对(关键字:值)的形式存储对象,关键字 key 是唯一的、不重复的。
● key 可以是任何对象,Value 可以任何对象。
●(key:value)成对放置在集合中。
● 重复的 key 算一个,重复添加是替换操作(会覆盖原来的元素)。
● 根据 key 的散列值计算散列表,元素按照散列值(丌可见)排序。
● HashMap 默认的容量:16 ,默认加载因子(加载率) 0.75。
● HashMap 根据 key 检索查找 value 值 。
HashMap 可以在构造时指定参数:初始容量和加载因子,一般使用默认
案例:HashMap
HashMap常用的方法
● clear();
● containsKey(Object key);
● containsValue(Object value);
● get();
● isEmpty();
● keySet();
返回所有的 key(注意:返回值都放入 set 集合中)
● put(key , value) ;
向 Map 中加入元素
● remove(Object o);
● size() ;
HashMap和Hashtable区别
● HashMap 新,非线程安全,不检查锁,快。
● Hashtable 旧 (JDK1.2 版本以前),线程安全,检查锁,慢一点(差的很小)。
● HashMap 较常用,HashMap 和 HashTable 的比较常出现于面试题 。
三、集合框架(Collection 和 Map)
集合框架包括集合不映射(Collection and Map), 以及它们的子类(容器类)。
● List:元素有先后次序的集合, 元素有 index 位置, 元素可以重复,继承自 Collection 接口,
实现类: ArrayList, Vector, LinkedList
● Set:元素无续, 丌能重复添加, 是数学意义上的集合, 继承自 Collection 接口
实现类: HashSet(是一个只有 Key 的 HashMap)
● Collection:集概念, 没有说明元素是否重复和有序, 使用集合的跟接口, 很少直接使用
其他集合都是实现类: ArrayList, HashSet
● Map:描述了(key: value)成对放置的集合,key 不重复,Value 可以重复(key 重复算一个)
实现类: HashMap(散列表算法实现)
TreeMap(二叉排序树实现,利用 Key 排序)
Map 适合检查查找
集合(Collection)框架,掌握常用的 3 个即可,如下图所示:
● Collection 接口 表示集合的概念
List 接口
Set 接口
● List 接口 表示有序线性表的概念
ArrayList 底层实现是数组
LinkedList 底层实现是链表
● Set 接口 表示无序不重复的概念
HashSet
HashSet案例:
关于 set 接口(HashSet)的测试,如下所示:
四、泛型
泛型是 Java5 以后提出的语法现象,作用是在编译期检查的类型约束(运行期丌检查泛型),泛型可以用来约束类中元素的类型 。
案例:
五、集合的迭代
集合的迭代,是一种遍历算法。
● 迭代操作举例:播放列表的“ 逐个播放”;将扑克牌“ 逐一发放”
● java 使用 Iterator 接口描述了迭代模式操作Iterator 中的方法,与门为 while 循环设计
● Iterator 的实例可以从集合对象获得,是这个集合的一个元素序列视图,默认包含一个操作游标(在第一个元素之前)
hasNext()方法,可以检查游标是否有下一个元素
next() 方法,移动游标到下一个元素,并丏返回这个元素引用
使用 while 循环配合这个两个方法, 可以迭代处理集合的所有元素
● 迭代时可以使用迭代器 remove() 方法删除刚刚迭代的元素在迭代过程中
迭代时不能使用集合方法(add, remove, set) 更改集合元素!
案例Iterator:
hasNext()和 next()方法是模式化的,配合 while 循环使用。
注意:每调用一次 next(),游标会向后移动一位。