第八讲__简答题

请问Collection接口下有哪些类型的集合?它们分别是什么? 各自特点是什么?

​List:有序、可重复、有索引
        ArrayList:有序、可重复、有索引
        LinkedList:有序、可重复、有索引
Set:无序、不重复、无索引
        HashSet:无序、不重复、无索引
                LinkedHashSet:有序、不重复、无索引
        TreeSet:默认由小到大升序排序、不重复、无索引


使用迭代器遍历集合过程中,如果删除数据, 会发生什么? 如何解决?

​会导致迭代器指向出问题

定义一个变量接收迭代器指向的数据,并使用迭代器自身的remove方法进行数据删除


假设有一个存放Student对象的List,在堆内存中,集合里面存的是什么?

​集合里面存储的是Student对象的地址,List存储的是引用地址,若对象在其他程序或方法中修改内容,List这边也会相应的修改。


 ArrayList和LinkedList的区别是什么? 分别适合什么场景?

​ArrayList是基于数组实现的,LinkedList是基于双链表实现的。

ArrayList适用于大量数据只需要查询不需要增删的场景中,

LinkedList适用于大量数据需要经常增删而较少查询的操作场景中。


 请写出数组、链表、栈、队列结构的特点?

数组 (Array)
        特点:

                数组是一种线性数据结构,元素存储在一块连续的内存空间中。
        优点:
                访问速度快,通过索引可以快速随机访问任意元素。
                结构简单,容易理解和实现。
        缺点:
                插入和删除效率低,尤其是在数组中间操作时,可能需要移动大量元素。
                大小固定,动态调整大小(如动态数组)会增加额外开销。


链表 (Linked List)
        特点:

                链表也是线性结构,但其元素在内存中不必连续存储,每个节点包含数据和指向下一个节点的指针。
        优点:
                动态分配内存,容易进行元素的插入和删除。
                不受固定大小限制,可以灵活地扩展。
        缺点:
                访问元素需要从头节点开始遍历,效率相对较低,尤其是随机访问。
                需要额外的空间存储指针。


栈 (Stack)
        特点:

                栈是一种特殊的线性表,遵循后进先出原则,只在栈顶进行插入和删除操作。
        优点:
                操作简单,主要只有两种操作:压栈(入栈)和弹栈(出栈)。
                适合需要逆序处理或内存管理等场景。
        缺点:
                只能访问栈顶元素,其他元素不可直接访问。
                数据结构特性限制了它的使用场景。


队列 (Queue)
        特点:

                队列是一种特殊的线性表,遵循先进先出原则,元素在队尾添加,在队首移除。
        优点:
                操作简单,主要涉及入队(在队尾添加元素)和出队(从队首移除元素)。
                适合用于需要处理顺序事件或任务调度的场景。
        缺点:
                除了队首和队尾,队列中的其他元素访问受限。
                插入和删除操作在两端,相比数组和链表在某些实现中可能需要额外同步控制。


HashSet是如何完成对象保存和去重的?

HashSet通过重写自定义对象的equals和hashCode方法来确保对象的唯一性。


1.计算哈希码 (hashCode):

         当向 HashSet 中添加一个对象时,首先会调用该对象的 hashCode() 方法来计算其哈希值。这个哈希值用于确定对象在哈希表中的存储位置。
2.检查相等性 (euqals):

         如果有多个对象的哈希值相同(哈希碰撞),HashSet 会进一步调用 equals() 方法来判断这些对象是否真正相等。如果两个对象根据 equals() 方法比较是相等的,那么它们被认为是同一个元素,因此不会被添加两次。
3.对象去重:

         如果一个新对象的 hashCode() 产生的哈希值已经存在于哈希表中,并且通过 equals() 方法确认与已存在的对象相等,则这个新对象将不会被添加到集合中,从而实现了去重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值