1.collection集合
数组弊端,一但创建无法动态扩容
集合中的泛型必须是引用类型,不能使用基本类型
集合重写了他的toString方法,打印的不是地址
1.collection接口(单列集合)
共同方法:
clear :清除所有元素
contains :集合是否包含给定的对象
isEmpty :判断集合是否为空
toArray :转化为数组
list集合的特点(接口)
1.有序,元素存储和取出的顺序一致
2.可重复,存储的元素可以相同
3.有索引,可以使用简单的for循环进行遍历
set集合的特点(接口)
1.不可重复,存储的元素不能相同
2.没有索引,不能使用for遍历
3.TreeSet和HashSet集合存取的顺序不一致,LinkedHashSet (有序的集合)
1.Iterator迭代器(接口)
他的获取实在collection中有一个iterator的方法
通用取出集合中元素
方法:
hasNext()
next()
remove()
while循环
实现原理:
1.使用collection集合中的iterator方法获取iterator对象 2.将指针(索引)指向集合中的-1(集合是0开头) 3.hasNext方法判断指针的下一个位置是否有元素(0是否有元素) 4.如果有元素使用next方法取出元素,指针下移
2.增强for循环
底层使用的是迭代器,简化了迭代器的书写
3.案例:斗地主
2.数据结构
1.栈
先进后出
2.队列
先进先出
3.数组
查询块,增删慢
因为数组的地址是连续的,通过数组的索引可以快速查找某一个元素
数组的长度是固定的,想要增删,就需要重新创建一个数组,复制原数组,在堆内存中,创建销毁效率低下
4.链表
查询慢,增删块
链表中的数据不是连续的,每次查询都需要从头查询,
链表在增加和删除的时候,只修改指针指向的地址
单向链表:链表中只有一条链子,不能保证元素顺序
5.红黑树
树
二叉树:叉子不能超过两个 ,左子树,右子树
排序树(查找树):在二叉树基础上,元素有大小,左边小,右边大
红黑树:趋近与平衡树,查询叶子节点最大次数和最小次数不能超过两倍
3.List集合
1.有序,元素存储和取出的顺序一致
2.可重复,存储的元素可以相同
3.有索引,可以使用简单的for循环进行遍历
方法:
add :添加
remove:移除
set:替换 list.set(4,"A");
get:获取
1.ArrayList(数组)
直接打印出来的不是地址,而是[ ]
ArrayList<String> list = new ArrayList<>()
方法:
添加 : add list.add
获取:get list.get 从0开始
删除:remove list.remove
长度:size list.size
2.LinkedList(链表)
不能使用多态
3.Vector(数组)
同步,单线程,安全,效率慢
4.Set集合
1.不可重复,存储的元素不能相同
2.没有索引,不能使用for遍历
3.TreeSet和HashSet集合存取的顺序不一致,LinkedHashSet (有序的集合)
1.HashSet
无序集合,存和取顺序不一致,底层是哈希表(查询速度快)
1.1 哈希表
哈希值:十进制整数 object.hashcode( )
toString的方法就是哈希值变成16进制 (对象的)
在1.8之前,哈希表=数组+链表
在1.8之后;哈希表=数组+红黑树
在存储的时候,先计算元素的哈希值,将元素的哈希值存入数组,元素的值存在链表中,如果链表的长度超过8位,转化位红黑树,加快查找速度
为什么不能重复?
set集合在存储数据的时候,会通过hashcode和equals判断元素是否重复 1.先判断hashcode,如果没有,进行添加,存入set数组中的是hashcode的值,数据存储在链表中 2.如果存在hashcode,使用equals进行比较,返回true,连个元素相同,不存储
如果要存储自定义的类型,必须重写hashcode和equals方法
1.1.1 linkedHashSet
哈希表(数组+链表+红黑树)+链表 ;多出来的链表存储元素顺序
linkedHashSet有序,不可重复
2.TreeSet
5.collections方法
addAll(list,"","","","");
shuffle(list); 打乱集合
sort(list); 默认方式排序 只适用于list方法 默认升序
使用前提,被排序的集合里面存储的元素,必须实现Comparable接口,重写接口中的方法comparaTo定义排序的规则
2.Map集合
key-value形式
key不可重复,value只能映射一个,但是可以重复
key-value一一对应
方法:
添加: put
获取:get
移除:remove
判断:containsKey
遍历:keySet,entrySet
1.HashMap
底层是哈希表 (查询速度块)
数组+链表+红黑树(链表长度超过8)
无序
2.LinkedHashMap
哈希表+链表(保证了顺序)