集合:可以简单的理解为储存数据的容器。这有没有让我们想起了数组呢?浅谈一下数组和集合的区别,希望有助于我们更好的理解。
集合和数组区别:
1.集合可以存储键值对映射关系数据,数组不可以;
2.集合的长度可以动态改变,数组的长度运行时固定不可变;
3.集合存储的数据为引用类型数据,如果集合存储基本类型数据也会自动装箱转为包装类存储到集合。数组可以存储基本类型和引用类型数据;
4.集合支持多种数据存储结构类型,数组不支持。
相对而言,集合弥补了数组的不足,数组是速度最快的容器。
简单谈一下集合的特点:
1.集合存储不确定数量的数据,集合长度动态改变;
2.集合可以存储具有键值对映射关系的数据(Map);
3.集合提供多种实现类满足不同的存储方式,如:二叉树结构、队列结构、堆栈结构等。
集合的类型主要有三种:list, set, map(这是学习的重点)
首先要弄清楚集合体系:
请看下图:
这是Collection体系,他有两个主要的子接口list 和set.它们的方法大致相同:
.List集合特点
1、存入的数据顺序和取出的顺序一样。
2、通过索引操作元素。
3、元素可重复的。
方法:
add();增
remove();删 可以根据内容移出,或根据下标移出
size();查 获取集合长度
set();改 set(索引,"改变的内容");
get();根据下标获取元素
addAll();合并集合
removeAll();删除集合中
contains();判断集合是否包含对应的元素
containsAll();集合是否是包含关系
retainAll(); 取重
clear();清空集合
Collections.sort(集合名,new Comparator<>(){});排序
遍历方式:
1>普通for循环
2>加强for循环
3>迭代器
//迭代遍历
List list=new ArrayList();
//.iterator();有下一个返回true,没有6false
Iterable iterable=list.iterator();
while(iterable.hasNext()){
Object next=iterable.next();
system.out.println(next);
}
ArrayList的特点:底层用数组实现,增删慢,查询快
LinkedList:底层用链表实现,增删快,查询慢。
Set :
特点:元素内容不能重复,无序
Set的遍历方式
1、增强for循环。
2、迭代器。
(因为set是无序的,所以set集合不能通过索引访问。)
set的方法与list大致相同,这里就不在做说明啦!介绍一下个人对HashSet存储的理解:
HashSet集合先调用存储对象的hashCode方法,得到hashCode值,hashSet集合内部计算出该元素的hash值,该hash值决定了存储元素将来在本集合中存储的位置,所以如果hash不重复,说明该位置没有被其他元素占用,直接存储。如果重复,则说明该对象A将要存储的位置被其他对象B所占用,那么执行第二步,调用equals方法进行详细判断要新增的元素A和已有的元素B是否重复。不重复那就存储,如果重复就不存储。
LinkedHashSet:
继承了hashSet,在HashSet已有的特征上,扩展了链式结构,保证了存入的顺序与取出的顺序一致,因为LinkedHashSet在保存的时候还要维护链式结构,效率上比HashSet慢。
Map:
Map用于保存具有映射关系的数据(键值对数据),每条数据由键(key)和值(value)组成,map以键值对方式存储数据的集 合;
Map集合的特点:
1、Map集合通过存储键值对映射关系的数据。
2、Map集合通过键key取值。
3、Map集合键key不可重复。
4、Map集合键key,值value为Object对象。
5、HashMap允许key值和value值为null值。
6、HashTable不允许key值为null值,value可以为空值。
map的常用方法:
put(),添加值
get();通过键获取值
keySet();获取键的set集合
entrySet();获取entry的set集合
实现原理:
通过hashcode,equals(),保证键不重复,如果不重复直接存储,如果重复取最后一个值,当我们把键值放在map中,会有entry对象会接受这个键值对,每存储一个键值对增加一个entry对象。遍历的时候遍历entry即可。
Map集合常用实现类有:HashMap、TreeMap、HashTable、LinkedHashMap,
map的遍历方式
第一种:
通过keySet()获取key的set集合,循环键获取值;
第二种:
通过map.entrySet(),获取到Entry键值对对象的集合,foreach遍历Entry键值对对象的集合。
第三种:
通过map.entrySet(),获取到Entry键值对对象的集合,再通过iterator迭代器遍历set集合获取到Entry对象。
说了这么多,不知道对您的学习有没有帮助呢?最后,再介绍一下集合的工具类Collections
Collection是集合体系,而Collections是我们操作集合的工具类哟。特意放在最后为大家强调一下。有兴趣的朋友可以进一步研究。