集合
迭代器 iterator(可以理解为遍历集合)
在collection继承了接口Iteratable 在他的里面有方法Iterator iterator()
在Iterator中有抽象方法hasNext 和next 所以在collection中有方法iterator(),
因为list为Collection子类,所以他里面也有这个方法(iterator) ArrayList为他的具体实现类,所以在ArrayList里面需要重写抽象方法iterator() ,在这就需要实现Iterator接口了在重写的抽象方法中 new Itr() 他就是Iterator的实现类,他重写了抽象方法,hasNext就是判断集合的长度是否为空,并且返回,next就是可以理解为数组指针的向后移动,在iterator中返回值是个iteraotr的实现类,用多态的形式接受, 所以返回一个Iterator 这就是具体迭代器的调用过程
List 有序,可以重复,有角标素
List中特有的方法
add(index,obj);
obj remove(index)
get(index)
int indexOf(obj);//第一次出现指定元素的位置
lastIndexOf(obj); //最后一次出现指定元素的位置
List subList(start,end)//从大的字符串中取出小的字符串
set(index,obj)
声明:数组在内存地址中是连续分配的
vector 最早出现的底层是数组,初始长度为16,同步,线程安全的,被arrayLilst代替
ArrayList 底层是数组,和vetor一样,效率比vector高,代替他,但是线程不是安全的,查询速度大于vector
异同:都是数组,,数组增长的时候,vector增长2倍,ArrayList增长1.5倍所以效率高
LinkedList:底层是双向链表,所以他的索引是不明显的,可以理解为一个队列,没有明确的索引,但是他这种索引是确实存在的
有序,,用它可以模拟栈和队列的特点,主要是他这有别于数组的 链表
LinkedList特有的方法
AddFirst()
addLast()
removeFirst()
removeLast()
getFirst()
getLast()’
void push(E e) 将元素推入此列表所表示的堆栈
E pop()从此列表所表示的堆栈处弹出一个元素
。
如果容器中没有,则抛出异常
Set 无序,没有角标,不允许重复HashSet LinkedHashSet
Haseset集合用的存放方式为哈希表(主要通过重写hashcode()和equals())
当存放一个元素的时候先判断元素的哈希值通过哈希算法,如果不一样就直接存放,如果hashcode一样就判断equeals的异同,如果为false就不存放,如果为true就以链表的形式,存放到当前数组的下面,如果再来一个hashcode值一样,就继续判断,再判断已经挂着的equesl是否一样,再挂上去当链表的长度>8的时候就会转换为一颗红黑树
在jdk1.7之前:数组+链表
在jdk1.8之后:数组+链表+红黑树 当结点>8后就转边为红黑树
数组初始长度为16,加载因子为0.75 意思就是存储的时候,当存储容量16*0.75为就会扩容数组的长度,扩容为原来的2倍
LinkedHashSet
底层为链表和HashSet所以有序
TreeSet
- 底层采用的是二叉树,存入的元素必须实现compartable接口,因为他存入元素 的时候调用comparatable中的compartTo方法进行比较 如果返回值是1的呢么他的存取就和链表一样了,存入什么取出就是什么
在compareTo中可以设置多个比较条件进行比较
他比较的时候不依靠hashcode和equals他依靠是就是compartable()方法
- 排序的两种方式:
一,让元素自身具备比较性。 也就是元素需要实现 Comparable 接口,覆盖 compareTo 方法。 这种方式也作为元素的自然排序,也可称为默认排序 。
二,让容器自身具备比较性,自定义比较器。 需求:当元素自身不具备比较性,或者元素自身具备的比较性不是所需的。 4 那么这时只能让容器自身具备。 定义一个类实现 Comparator 接口,覆盖 compare 方法。 并将该接口的子类对象作为参数传递给 TreeSet 集合的构造函数。 当 Comparable 比较方式,及 Comparator比较方式同时存在,以 Comparator 比较方式为主。 注意:在覆盖 compareTo 方法,或者 compare 方法时, 必须要明确比较的主要条件相等时,需要参阅次要条件
Map
Map中存放的都是键值对,map中不允许存放重复的键,可以存放重复的值,他不允许运放重复的原理也是重写hashcode()和equals方法
HashMap
HashMap和Hashtable异同
底层都是哈希表结构,
HashMap是线程不安全的,可以存入null键null值
Hashtable是线程安全的不可以存入null键null值被HashMap代替
HashMap
方法:添加:
Put(key,value) 如果键没有重复,则返回null
删除:
remove(key) 返回要删除的值
clear()
获取:
get(key) 返回value值
判断:
ContainsValue()
ContainKey()
isEmpty()
遍历获取:keySet 获取所有键,返回值是一个set集合
Values() 获取所有值 返回值是一个collection集合
entrySet() 返回键值对的set集合,这个集合中存放的是
键值对对象,这是一个特殊的对象
LinkedHashMap
底层采用哈希表+链表 存取有序,提高增删效率
Map.Entry理解
- Entry是一个接口对象,他在Map接口集合中定义,是一个内部接口(在接口内部定义一个新的接口 用的修饰符为public Static 可以看做为两个不同的接口), 它里面由getKey getValue equals hashcode等方法,用以实现队Map集合的遍历,
- Map集合中只定义entrySet()方法,没有写具体的实现,具体的实现由他的实现类来实现,比如Hash Map他的返回值就是一个Entry的实现对象,由于他是在Map接口中定义的所以,用Map.Entry来调用由于在内部封装了所以不知道具体返回了什么对象名字,所以这里采用了多态的形式来返回接口名字Map.Entry 用来遍历Map集合
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构