关于java的集合
集合
为什么用集合不用数组
数组的长度是固定,集合的长度是可以动态改变的
应用场景
-
无法预测存储数据的数量
-
存储具有一对一关系的数据
-
数据的增删
-
数据重复问题,用set集合解决
注意
集合只能使用引用数据类型,虽然数字能传进去,其实是java内部的一个自动装箱的操作(如int型转成了Integer型)
体系结构
-
ArrayList底层是数组实现的,所以是连续存储,查询快
-
LinkedList底层是双向链表实现的,增加和删除快,查询快
-
HashSet是哈希表实现的,是无序的,他元素可以是null,但只能有一个null
-
TreeSet是基于二叉树实现的,可以自动排序,不允许放null
-
HashMap适用于在Map插入、删除和定位元素
-
TreeMap适用于按自然顺序对键值对进行遍历
List集合
ArrayList
无参构造是默认初始化容量10
数组实现,有序可重复
可动态增长
元素可有null
Set集合
元素无需且不可重复
只允许一个null元素
set集合在读取数据的时候不允许删除操作
set.remove(collection c)支持从set中删除c这样的子集
//删除年龄大于5个月的并重新输出
Set<Cat> newSet= new HashSet<Cat>();
for (Cat c:set) {
if (c.getMonth()>10)
newSet.add(c);
}
set.removeAll(newSet);
hashCode和equals方法的作用
当添加一个数据的时候,会调用hashCode()方法,得到hash code值,通过这个值可以找到数据的存储位置(不是单个位置,是一片区域,该区域的hash code值是相等的),当能找到这个位置时,在用equals比较数据是否相等,相等就重复了,不相等就进行存储
如果两个对象相等,那么它hashCode值一定相等,反之则不一定,还需要equals比较
Map
特征
-
Map的数据是以键值对(k-v)形式存储的
-
k-v以Entry类型的对象实例存在
-
可用通过key快速查找到value的值
-
一个映射不能包含重复的键,k不能重复,v可以重复
-
每个键最多只能映射到一个值
HashMap
特征
-
基于哈希表的Map接口实现
-
允许使用null键和null值,但null键只能有一个
-
key值不允许重复
-
HashMap的Entry对象是无序排列的