【面试小知识】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(优先队列):按照给定的优先级,进行出队列,用于迪杰斯特拉算法,用于计算最短路径。


相关文章
|
3月前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
3月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
3月前
|
Java
【Java集合类面试二十八】、说一说TreeSet和HashSet的区别
HashSet基于哈希表实现,无序且可以有一个null元素;TreeSet基于红黑树实现,支持排序,不允许null元素。
|
3月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
3月前
|
Java
【Java集合类面试二十六】、介绍一下ArrayList的数据结构?
ArrayList是基于可动态扩展的数组实现的,支持快速随机访问,但在插入和删除操作时可能需要数组复制而性能较差。
|
3月前
|
存储 Java 索引
【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?
ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入和删除操作更高效,但占用更多内存。
|
1月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
85 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
存储 安全 Java
Java集合类面试十七】、介绍一下ConcurrentHashMap是怎么实现的?
ConcurrentHashMap在JDK 1.7中通过分段锁实现线程安全,在JDK 1.8中则采用Node数组配合链表和红黑树,并使用Synchronized和CAS操作提高并发性能。
Java集合类面试十七】、介绍一下ConcurrentHashMap是怎么实现的?
|
3月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。