集合

迭代器 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

  1. 底层采用的是二叉树,存入的元素必须实现compartable接口,因为他存入元素 的时候调用comparatable中的compartTo方法进行比较  如果返回值是1的呢么他的存取就和链表一样了,存入什么取出就是什么

        在compareTo中可以设置多个比较条件进行比较

   他比较的时候不依靠hashcode和equals他依靠是就是compartable()方法

  1. 排序的两种方式:

一,让元素自身具备比较性。 也就是元素需要实现 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理解

  1. Entry是一个接口对象,他在Map接口集合中定义,是一个内部接口(在接口内部定义一个新的接口  用的修饰符为public Static 可以看做为两个不同的接口), 它里面由getKey  getValue  equals hashcode等方法,用以实现队Map集合的遍历,
  2. Map集合中只定义entrySet()方法,没有写具体的实现,具体的实现由他的实现类来实现,比如Hash Map他的返回值就是一个Entry的实现对象,由于他是在Map接口中定义的所以,用Map.Entry来调用由于在内部封装了所以不知道具体返回了什么对象名字,所以这里采用了多态的形式来返回接口名字Map.Entry 用来遍历Map集合
posted @   这都没什么  阅读(102)  评论(0编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示