【面试小知识】Collection(接口)集合

简介: 【面试小知识】Collection(接口)集合

1. 简介

近期,在牛客网看到关于collection接口集合的问题,一时间自己没想起来,于是自己整理了一下。

2. Collection(接口)集合架构

3.集合分析

我们可以看到,关于Collection主要分为常见的Set、list、queue

3.1 Set(接口、无序、无索引、不重复性)

对于set集合,一般我们在用的时候,主要利用其不重复性,比如我们在筛选数据时,放进去,提出来,Set集合自动帮我们去除掉重复的数据

  • HashSet:底层数据结构是哈希表(无序,唯一)。保证元素唯一性依赖于两个方法:hashCode()和equals()
  • LinkedHashSet:底层数据结构是链表和哈希表。(先入先出,有序,唯一)。通过链表保证有序性, 通过哈希表保证唯一性。
  • TreeSet:底层数据结构是红黑树。(唯一,有序)

这里主要谈一下关于Set数组去重的问题,在Set源码中,boolean add(E e);我们看到关于其添加的操作是一个boolean的判断值,也就是我们在添加数据时,需要判断当前Set中有没有该数据。

在HashSet中,利用HashCode()和equals()进行比较:

补充:关于HashCode:通过对象的内部地址(也就是物理地址)转换成一个整数,然后该整数通过hash函数的算法就得到了hashcode

详情参考:HashCode

这也是为什么我们在重写时,HashCode和equals要一起重写的原因

看上图,我们重写了equals()函数,只要传入的对象的w/q一样就返回true,但是,我们看上述流程图会发现,他们会先进行HashCode的比较,所以,在HashCode这一关过不去,就更不用谈equals()了。

3.2 list(有序,可重复。)

  • ArrayList:底层实现的数据结构是数组,查询快,增删慢。线程不安全,效率高
  • LinkedList:底层实现的数据结构是链表,查询慢,增删块。线程不安全,效率高
  • Vector:底层实现的数据结构是数组,查绚块,增删慢。线程安全,效率低。

关于ArrayList和LinkedList的区别以及ArrayList的扩容机制:ArrayList和LinkedList

3.3 queue(队列)

  • queue:先进先出
  • Dueue:双向队列,可以两端对数据进行操作
  • priorityqueue(优先队列):按照给定的优先级,进行出队列,用于迪杰斯特拉算法,用于计算最短路径。


相关文章
|
6月前
|
存储 安全 Java
面试--集合
面试--集合
38 0
|
8天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
20天前
|
存储 安全 Java
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(下)
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(下)
43 0
|
20天前
|
存储 安全 Java
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(上)
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)
35 0
|
24天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
40 0
|
5月前
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
19 0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
160 2
|
2月前
|
存储 算法 Java
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
43 0
|
7月前
|
索引
【面试题精讲】LinkedList 为什么不能实现 RandomAccess 接口
【面试题精讲】LinkedList 为什么不能实现 RandomAccess 接口
|
3月前
|
缓存 Java 数据库
2024java面试题无需C币下载 速度之战:全方位解决Java接口慢响应问题
2024java面试题无需C币下载 速度之战:全方位解决Java接口慢响应问题
74 1