通过面试题,让我们来了解Collection,java数据库面试问题及答案

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

List (有序集合,允许相同元素和null)

–LinkedList (非同步,允许相同元素和null,遍历效率低插入和删除效率高)

–ArrayList (非同步,允许相同元素和null,实现了动态大小的数组,遍历效率高,用的多)

–Vector(同步,允许相同元素和null,效率低)

—Stack(继承自Vector,实现一个后进先出的堆栈)

Set (无序集合,不允许相同元素,最多有一个null元素)

–HashSet(无序集合,不允许相同元素,最多有一个null元素)

Map (没有实现collection接口,key不能重复,value可以重复,一个key映射一个value)

–Hashtable (实现Map接口,同步,不允许null作为key和value,用自定义的类当作key的话要复写hashCode和eques方法,)

–HashMap (实现Map接口,非同步,允许null作为key和value,用的多)

–WeakHashMap(实现Map接口)

3.2 Collection 中的主要方法

(1)添加

boolean add(E o);

boolean add(Collection<? extends E> c);

(2)删除

boolean remove(Object o);

boolean removeAll(Collection<? extends E> c)

void clear();

(3)判断

a.判断集合中是否有元素:boolean isEmpty();

b.判断集合中是否包含某个元素:boolean contains(Object o);

c.判断集合中是否包含某些元素:boolean contains(Collection<?> c);

(4)获取

a.获取集合中元素个数:int size();

b.遍历集合中所有元素:Iterator iterator();

c.判断两个集合中是否存在相同的元素并保留两个集合中相同的元素删除不同的元素:boolean retainAll(Collection<?> c);

(5)其他

将集合中元素转为数组:

a. Ojbect[] toArray();

b. T[] toArray(); 泛型

Java8新增方法

在 JDK 8 以后,Collection 接口还提供了从集合获取连续的或者并行流:

Stream stream()

Stream parallelStream()

于Collection接口相关还有一个抽象类AbstractCollection:

AbstractCollection是一个抽象类,实现了Collection接口的部分功能,实现了一些最基本的通用操作,把复杂的和业务相关的延迟到子类实现。

在AbstractCollection中,主要实现了contains(), isEmpty(), toArray(), remove(), clear() 这几个操作。有兴趣的同学可以自行研究下,逻辑都比较简单。

特别注意:List接口扩展了一个一些方法,其中最重要,也是用的最多的是:

E get(int index) 返回指定索引的元素

4.数组和集合都有哪些区别?


数组特点:

  1. 数组本质上就是一段连续的内存空间,用于记录多个类型相同的数据;

  2. 数据一旦声明完毕,则内存空间固定不变;

  3. 插入和删除操作不方便,可能会移动大量的元素并导致效率太低;

  4. 支持下标访问,可以实现随机访问;

  5. 数组中的元素可以是基本数据类型,也可以使用引用数据类型。

集合特点:

  1. 内存空间可以不连续,数据类型可以不相同;

  2. 集合的内存空间可以动态的调整;

  3. 集合的插入删除操作可以不移动大量元素;

  4. 部分支持下标访问,部分不支持;

  5. 集合中的元素必须是引用数据类型(你存储的是简单的int,它会自动装箱成Integer);

可以看出数组和集合在数据的存储,访问,类型,长度等都有不同的地方。

5.说一说迭代器 Iterator?


  1. 通过集合对象获取其对应的Iterator对象

  2. 判断是否存在下一个元素

  3. 取出该元素并将迭代器对象指向下一个元素

Iterator iterator():取出元素的方式:迭代器。该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。

所以该迭代器对象是在容器中进行内部实现的。对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。

扩展知识:

ArrayList里面的iterator方法采用了设计模式中的——工厂方法模式!

有兴趣的同学可以后续看到我另外的文章“设计模式精讲”专栏。

6.Collection接口中几种重要的类和接口简介?


该问题与第二个问题类似~ 后续文章会有更详细的介绍!

Collection两大体系:链表List、集合Set 另映射Map

List接口及子类介绍

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。

实现List接口的常用类有:

  • LinkedList类 (底层数据结构是链表,线程不安全)

  • ArrayList类 (底层数据结构是数组,线程不安全)

  • Vector类  (底层数据结构是数组,线程安全)

  • Stack类 (顾名思义:栈,继承至Vector类并进行扩展)

在后续的文章中我们将一一详细介绍这些类的相关特性!

Set接口及子类介绍

Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

实现Set接口的常用类有:

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

小米商场项目实战,别再担心面试没有实战项目:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
366474020)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-qNTiL76d-1713366474020)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值