Collection 集合 接口
|-----List 线性集合(线性表):元素有先后次序,元素有序号
|-----|----ArrayList
|-----|----LinkedList
|-----Set 元素无序,元素不能重复的集合
HashSet 底层是HashMap(屏蔽了value部分的Map)
Collections
|-----sort
|-----binarrySearch
|-----打乱
Map 接口 键值对(key-value) 成对添加的集合
HashMap 散列表算法,面向查找优化的算法,查找性能优异,无论多少数据量,查找次数少于3次
散列表容量:散列表中数组的大小
散列表的大小(size):散列表中存储的(key-value)元素的数量
加载因子:大小/容量(容量:能装在的最大值一般为75%)
散列桶:散列值相同的元素集合
size/容量<=加载因子(75%)
为了提高效率,减少扩容次数
HashMap 散列表容量:散列表中数组的大小
HashMap 构造器默认创建容量是16,加载银子是75%
默认加载到12就满了,如果再添加就自动扩容
经过测试75% 的加载率,查询效率很高,最多不超过3次
散列表的迭代(遍历)
迭代就是将散列表的元素逐一处理一遍的算法
散列表没有直接的迭代起方法
1 利用key的集合进行迭代
2 利用key-value对集合进行迭代
散列表中:key是不允许重复,value可以重复
重复添加同一个key,会将原key-value替换掉
Map 接口 键值对(key-value) 成对添加的集合
hashMap 散列表算法,面向查找优化的算法,查找性能优异,无论多少数据量,查找次数少于3次
散列表容量:散列表中数组的大小
散列表的大小(size):散列表中存储的(key-value)元素的数量
加载因子:大小/容量(容量:能装在的最大值)一般为75%
散列桶:散列值相同的元素集合
size/容量<=加载因子(75%)
为了提高效率,减少扩容次数
HashMap 构造器默认创建容量是16,加载银子是75%
默认加载 到12就满了,如果再添加就自动扩容
经过测试75% 的加载率,查询效率很高,最多不超过3次
Map的迭代
Map的常用方法:就是对Map集合中的key-value对进行的增删改查
增加方法:put(key,value) putAll(map) 合并两个map集合
删除:remove(key) 删除对象的key-value对 clear()
修改:put(key,value)
查询:value get(key) 查询、获取key对应的value
containsKey(key) 查询使用包含了key
containsValue(key) 查询使用包含了value(value可以重复)
size() key-value对的个数
Set 集合 元素不重复 无序
Map
|--HashMap 散列表
1 查询速度快 查询方法:get() containsKey()
散列查找的速度要远远大于线性顺序查找
不管多少数据,一般会在3此比较以内找到
散列查找过程:根据key查找value的过程
1 根据key对象的hashCode()的值计算散列数组的下标位置
2 找到下标位置的对应的散列桶(线性链表)
3 在散列桶中线性查找key,查找时候使用equals()比较是否找到了key
4 如果找到key,就返回key对应的value,否则返回null
2 影响散列表性能的参数
1 容量
2 大小(size)
3 加载因子:最大的加载率,加载率 大小/容量
加载因子默认值为75% 一般可以保证散列桶,长度不会超过3个
在向散列表添加元素时候,当实际加载率超过75%时候会自动扩容,发生重新散列现象。
在重新散列时候性能很差,可以利用 构造器设定初始容来嗯,减少散列次数
如:10000数据 10000/建议容量<=75%
集合结构
Apache.org commons-collection.jar
Collection
|--List
|---|---ArrayList
|---|---LinkedList
|--Set
|--|---HashSet
|--|---TreeSet
Map
|--HashMap(key-value)
|--Hashtable
|--LinkedHashMap
|--TreeMap
迭代注意事项:在迭代期间不能操作集合内容(添加、删除元素)
迭代器的删除操作可以使用!否则会发生运行异常