10.14-Set集合、散列表
Set集合
无序集,不重复集
所谓的不重复指的是Set集合中不会出现两个equals()比较为true的元素
Set集合的实现类
HashSet 使用散列算法实现
TreeSet 使用二叉树来实现(不常用)
例子-无序与不重复特点
package day10_14;
import java.util.HashSet;
import java.util.Set;
public class HashSetDemo01 {
/**
* Set集合:无序、不重复
*/
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("one");
set.add("two");
set.add("three");
set.add("four");
System.out.println(set.size());//[four, one, two, three]
/*
* 元素的存放顺序与元素在集合内部的保存位置不同
*/
System.out.println(set);
set.add("one");//重复添加
//Set集合不能存入重复的元素
System.out.println(set);//[four, one, two, three]
}
}例子-Set集合遍历
对于HashSet而言,它存取元素时依赖于元素的
HashCode()方法
HashCode()方法是Object类中的方法,所有的类都具备该方法,通常我们重写一个类的equals()方法时要求一并重写hashCode方法
HashCode()重写注意事项
HashCode()重写注意事项hashCode()方法在被多次调用时应当返回一个稳定值,除非参与的equals()方法比较的属性发生了改变当两个对象
equals()方法比较为true时,两个对象的hashCode()方法的返回值就应当相同当两个对象
equals()方法比较为false时,不要求hashCode()方法的返回值不同
例子-HashSet对HashCode()的依赖
首先,创建Element.class类
再创建HashSetDemo03.class测试类
散列表
Map
是一个多行两列的表格,每一行储存一项
一项中包含两个部分:key-value(键值对)
其常见的实现类:HashMap(使用散列算法实现的Map)
散列表常见概念
容量:散列表中散列数组的大小(不能无限大)
散列运算:根据key计算散列值的算法(散列算法)
散列桶:散列值相同的元素的"线性集合"
加载因子:是散列数组的加载率,一般小于75%性能就比较理想(元素数量/散列数组的大小)
散列查找:根据key计算散列值,根据散列值查找对应的value
散列表中的key绝对不同,但value可以相同
HashMap的性能调优
加载因子的比值如果超过0.75时,散列数组将扩容;存在原数组中的数据,需要重新进行散列运算之后存入新的数组当中,并不是简单的将原数组中的数据复制到新数组中,这个过程称之为rehash(重新散列);而这么扩容数组,rehash则会带来一定的性能开销
HashMap
以键值对的形式来存储对象,关键字Key是唯一不重复的。
Key可以是任意对象,value也可以是任意对象
Key-value需要成对放置在集合中
重复key只计算一个,重复添加时后添加的value将覆盖旧value值
根据key的散列值计算散列表,元素按照散列值进行排序(散列值是没有顺序的)
HashMap的默认容量是16,默认的加载因子是0.75
HashMap可以根据key检索查找value值
HashMap可以在构造器中指定参数:初始容量与加载因子
散列表中常用方法
V put(K k,V v)
将一对键值对存入到散列表中。
因为Map要求key不允许重复,所以当使用相同的key存入不同的元素,其操作为替换value
put返回值是被替换的value
v get(Object k)
根据给定的key获取对应的value,若是给定的key不存在,则返回null
例子
遍历Map的三种方式
遍历所有的key
遍历所有的value
遍历所有的键值对
例子
例子-列表
HashTable(JDK1.2)
相对于HashMap来说,HashTable速度更更慢,但其更安全。
总结
集合框架(Collection和Map)
集合框架包括集合及其映射的子类
List集合:元素有先后次序,玄素有index位置,元素可以重复,继承于Collection接口,实现类有ArrayList/LinkedList/Vector
Set集合:元素无序,不能重复添加,是真正意义上的数学集合,继承自Collection接口,实现类有HashSet(是一个只有key的HashMap)/TreeSet
Collection:没有说明元素是否重复和有序,很少使用
Collections:集合的工具类
Map:描述了成对(key-value)放置的集合;key不可重复,value可以重复;实现类有HashMap/HashTable/TreeMap
最后更新于