面试-collection体系

server/2024/11/15 4:57:43/

1.整体collection体系图在这里插入图片描述
2.集合List和Set
在这里插入图片描述
(1)ArrayList和LinkedList区别
我们知道,通常情况下,ArrayList和LinkedList的区别有以下几点:
1. ArrayList是实现了基于动态数组的数据结构(可以实现扩容,实现方式是建立一个新的数组,再覆盖掉原先的数组;因为ArrayList的创建就是新建一个数组),而LinkedList是基于链表的数据结构;(LinkedList底层维护了一个双向链表,由于其是双向链表所以其对元素的增,删效率要比ArrayList要好,也因是链表,其没有扩容机制,就是一直在前面和后面新增就好(链表的头插法和尾插法))
2. 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
对于插入跟删除,LinkedList的时间更长了, 现在大概知道了,插入位置的选取对LinkedList有很大的影响,
因为LinkedList在插入时需要向移动指针到指定节点, 才能开始插入,,一旦要插入的位置比较远,LinkedList就需要一步一步的移动指针, 直到移动到插入位置,这就解释了, 为什么节点值越大, 时间越长, 因为指针移动需要时间。
而ArrayList是数组的数据结构, 可以根据下标直接获得位置, 这就省去了查找特定节点的时间,所以对ArrayList的影响不是特别大。
压测:
主要有两个因素决定他们的效率,插入的数据量和插入的位置。我们可以在程序里改变这两个因素来测试它们的效率。当数据量较小时,测试程序中,大约小于30的时候,两者效率差不多,没有显著区别;当数据量较大时,大约在容量的1/10处开始,LinkedList的效率就开始没有ArrayList效率高了,特别到一半以及后半的位置插入时 ,LinkedList效率明显要低于ArrayList,而且数据量越大,越明显。

(2)Hashset与TreeSet的区别
Hashset的底层是HashMap.在调用add方法时,将元素以键的形式放入到HashMap里,同时给他对应一个值。
TreeSet是NavigableMap的马甲。使用add将元素以键的形式保存到TreeMap的key里。而它的值就是final Object PRESENT.NavigableMap是个interface。是由TreeMap实现的。TreeSet是TreeMap的马甲。使用compareto进行自然排序的。关键词:排序

3.集合之Map
在这里插入图片描述
Map里的key是通过set实现的,不可重复,唯一。Value是通过collection实现的,可重复的
在这里插入图片描述
(1)HashMap与HashTable与conccurentHashMap的区别
hashmap的数组长度默认是16.
在这里插入图片描述
在这里插入图片描述
分析:
使用TREEIFY_THRESHOLD来控制是否将链表转化为红黑树来存储。
Hash值相等的键值对以链表形式存储,如果链表的大小超过TREEIFY_THRESHOLD(默认是8),就会被改造成红黑树。低于UNTREEIFY_THRESHOLD(默认为6),又会被转化成链表。为了更高的性能。HashMap使用lazyLoad的原则,在首次使用的时候才会被初始化。

在这里插入图片描述
碰撞:意味着hash值相等。
在这里插入图片描述
在这里插入图片描述

Hashtable:
早期java类库提供的哈希表的实现。
线程安全:涉及到修改HashTable的方法,使用synchronized修饰
串行化方式运行,性能较差。

conccurentHashMap:
分析:
如何优化Hashtable?
通过锁细粒度化,将锁拆解成多个锁进行优化。

早期的ConcurrentHashMap通过分段锁Segment实现。
在这里插入图片描述
当前的ConcurrentHashMap:CAS+synchronized使锁更细化。
数据结构采用数组+链表+红黑树。Synchronized只锁住当前链表或者红黑树的首节点,
只要hash不冲突,就不会产生并发。
在这里插入图片描述
在这里插入图片描述

总结:
在这里插入图片描述


http://www.ppmy.cn/server/53631.html

相关文章

深入理解 Vue.js 中的 deep: true

深入理解 Vue.js 中的 deep: true 在 Vue.js 中,监听器 (watchers) 是一种强大的工具,允许我们观察和响应数据的变化。当需要监听复杂的对象或数组时,deep: true 配置选项就显得尤为重要。本文将详细介绍 deep: true 的用途、工作原理以及一…

第1章 大数据技术的基石

目录 第1章 大数据技术的基石 1.1什么是大数据 1.2 大数据技术的生态系统概览 1.3大数据对社会经济的深远影响 第1章 大数据技术的基石 在信息爆炸的时代背景下,大数据已成为推动社会进步与经济发展的核心驱动力之一。随着互联网、物联网、社交媒体的迅猛发展&a…

MySQL——基本的Select语句和别名使用

DQL (Data Query Language:数据查询语言) 所有的查询操作都用它 Select 简单或者复杂的查询都能做 数据库中最核心的语言,最重要的语句 使用频率最高的语言 指定查询字段 -- 查询全部的学生 SELECT 字段 FROM 表…

社团成员信息系统

ER实体关系图与数据库模型 DDL CREATE TABLE club (club_id int(11) NOT NULL AUTO_INCREMENT,club_name varchar(100) NOT NULL,president_name varchar(50) DEFAULT NULL,foundation_date date DEFAULT NULL,description text,PRIMARY KEY (club_id),KEY president_name (pr…

Flask模板和wtforms

Flask模板和wtforms 一、模板 在 Jinja2 模板引擎中,可以使用各种功能来渲染变量、进行循环和逻辑判断,这与 Django 的模板系统有很多相似之处,但也存在一些差异。 1.渲染变量 在 Jinja2 中,可以通过使用双大括号 {{ }} 来渲染…

【MySQL】视图

文章目录 视图视图的基本使用视图的规则和使用限制视图的作用 视图 MySQL的视图是一个虚拟的表,它是基于一个SQL查询结果的表。视图本身不存数据,数据依然存在基础表中,视图存的是一个查询结果集。看上去和真实的表一样,视图包含一…

Java中的网络安全与防护技巧

Java中的网络安全与防护技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java应用程序中如何有效地保护网络安全,防范各种安…

css_23_多列布局

常用值: column-count:指定列数,值是数字。 column-width:指定列宽,值是长度。 columns :同时指定列宽和列数,复合属性;值没有数量和顺序要求。 column-gap:设置列边距…