Java:Java集合系统整理
1. 集合是做什么的?
Java集合类位于Java.util包中,是一个用来存放对象的容器。
2. Java集合框架
可以发现上述所有的集合类,除Map之外,都实现了Iterator接口。
Iterator可用来遍历集合类,提供有hasNext(), next(), remove()三个方法;
其子接口ListIterator在此基础上增加了add(), previous(), hasPrevious()三个方法。
3. 面试题汇总
3.1 List、Set、Map三者的区别?
List(对付顺序的好帮手): 存储的元素是顺序的,可重复的;
Set(注重独一无二的性质): 存储的元素是无序的,不可重复的;
Map(用key来搜索的专家): 使用键值对(key-value)存储,key是无序的,不可重复的;value是无序的,可重复的。
3.2 ArrayList和LinkedList的区别?
1)底层数据结构
ArrayList底层使用的是Object数组;
LinkedList底层使用的是双向链表(JDK1.6之前是循环链表,1.7之后取消了循环链表)。
2)插入和删除是否受元素位置的影响
ArrayList会;
LinkedList不会。
3)内存占用空间
ArrayList空间浪费主要体现在List结尾会预留一定的容量空间;
LinkedList空间浪费体现在每个节点需要存后继和前驱。
4)是否支持快速随机访问
随机访问是指通过元素的序号快速获取元素对象(对应于get(int index)方法)
ArrayList支持;LinkedList不支持。
3.3 ArrayList和Vector的区别?
ArrayList是List的主要实现类,底层使用Object数组实现,是线程不安全的;
Vector是List的古老实现类,底层也使用Object数组实现,是线程安全的。
3.4 HashMap和HashTable的区别?
1)线程是否安全
HashMap线程不安全,想要线程安全的话使用ConcurrentHashMap;
HashTable线程安全,内部所有的方法基本都经过synchronized修饰。
2)效率高
HashMap效率高;
HashTable基本被淘汰,不要在代码中使用它。
3)null值
HashMap允许key和value为null值,key为null只能有一个,value为null可以有多个;
HashTable不允许有null值,否则会报异常。
4)初始容量和每次扩充容量大小的不同
HashMap初始容量为16 ,扩容变为原来的2倍 ,创建时如果给定容量初始值,容量会成为设置容量的2的幂次方; -- HashMap总是使用2的幂作为哈希表的大小
HashTable初始容量为11 ,扩容每次扩为2n+1,创建时如果给定容量初始值,给定为几就是几。
5)底层数据结构
Jdk1.8后HashMap扩容机制发生了较大变化,当链表长度大于阈值8(默认)时 ,先判断数组长度如果小于64先对数组进行扩容而不转换成红黑树,之后如果链表长度大于8则将链表转成红黑树;
HashTable没有这样的机制。
参考链接:
原文地址:https://www.cnblogs.com/yuanyunjing/p/15162437.html
- 源码解读提高RGW并发数-fastcgi模式
- ceph-rest-api 用例
- 数据字典项实现方案
- Common Service Locator library
- 源码解读bucket 删除中的一些细节
- 论Spark Streaming的数据可靠性和一致性
- RGW 的GC深入解析与调优
- 大数据查询——HBase读写设计与实践
- 基于Logstash的自动化运维系统实现
- 简谈RGW的index shard计算
- Blackpearl 的 Impersonate
- SparkMLLib中基于DataFrame的TF-IDF
- 运用Python实现WordPress网站大规模自动化发布文章
- 基于java的中文分词工具ANSJ
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 打卡群刷题总结0925——最佳买卖股票时机含冷冻期
- 备忘:美化pymol作图1
- 宿舍(寝室)管理系统设计与实现 | 附 演示、源码地址
- Oracle字符集检查和修改
- Vue3 DOM Diff 核心算法解析
- PHP的LZF压缩扩展工具
- Python函数定义及参数详解
- 代码失而复得心塞往事 - git stash命令
- 如何通过 Shell 监控异常等待事件和活跃会话
- PHP中环境变量的操作
- 一文读懂JAVA并发容器类ConcurrentHashMap
- Creator3D新版本震撼来袭
- SpringBoot源码学习(十)-Spring类级别注解解析原理
- 从安全切面到Security Mesh
- SpringBoot源码学习(十一) - bean的实例化过程