集合
集合存储元素时,存储的时元素的地址信息。
java中的集合分为两种:单列集合和双列集合
单列集合:collection,集合中每个元素只包含一个值
双列集合:Map,集合中每个元素包含两个值,即键值对
collection集合的特点
(List集合和Set集合的特性刚好相反)
List集合:添加元素是有序的、可重复,有索引
ArrayList、LinkedList:有序、可重复、有索引
Set集合:添加元素是无序的、不可重复、无索引
Hashset:无序、不重复、无索引
LinkedHashSet:有序、不重复、无索引
TreeSet:按照大小默认升序排序、不重复、无索引
集合中常用的方法:
1、add()方法,添加成功返回true,添加失败返回false
2、clear()方法,清空集合中的元素
3、isEmpty()方法,判断集合是否为空
4、size()方法,获取集合的大小
5、contains()方法,判断集合是否包含某个元素
6、remove()方法,删除某个元素:如果有多个重复的元素默认删除最前面的一个
7、toArray()方法,将集合转换为数组
8、addAll()方法,将一个集合中的数据全部添加导另一个集合中去(前提是两个集合中的数据类型一致)
集合的遍历方式(Collection):
迭代法(集合遍历的专用方式):
步骤:1、从集合对象中获取迭代器对象。--- Iterator<String> it = x.iterator()
2、调用next()方法 it.next()
3、使用hasNext()方法进行循环遍历while(it.hasNext()){...}
增强for(迭代器遍历集合的简化写法):
for(元素的数据类型 变量名:数组或者集合){...}
lambda表达式:
List集合
List底层是一个接口,不能生成对象,如果要生成对象,需要使用其的实现类来实现
1、特点
2、遍历方法
for循环
迭代器
增强for循环
lambda表达式
ArrayList集合的底层原理及应用场景
底层原理:基于数组实现
数组的特点:
查询速度快:(根据索引查询)查询数据是根据地址值和索引定位,查询任意数据耗时相同
删除效率低:可能需要把后面很多的数据进行前移
添加效率极低:可能需要将后面很多数据后移,再添加元素;或者也可能需要进行数组的扩容、
LinkedList集合的底层原理及应用场景
基于双链表实现
链表中的节点是独立的对象,在内存中是不连续的,每个节点包含数据值和下一个节点的地址
链表的特点:查询慢,无论查询那个数据都要从头开始找(即使链表是有索引的),增删快。
应用场景:
设计队列:先进先出
设计栈:后进先出
Set集合
特点
HashSet集合的底层原理
加载因子为0.75的意思是当要存的在数组中的数值大小小于数组的长度×0.75数值不会进行扩容,否则会扩容为原来的两倍。
解决方案:重写hashcode和equals()方法
LinekedHashSet集合的底层原理
TreeSet集合
选择就近的比较器进行排序
集合的注意事项:并发修改异常问题
Map集合
Map系列集合的特点都是由键决定的,值只是一个附属品,值不做要求
HashMap(由键决定特点):无序、不重复、无索引(用的最多)
LinkedHashMap(由键决定特点):有序、不重复、无索引
TreeMap(由键决定特点):按照大小默认升序排序,不重复、无索引