当前位置: 首页 > news >正文

面试题库之JAVA基础篇(二)

String
  1. 只读字符串。
  2. 每次+操作会隐式的在内存中new一个跟原字符串一样的StringBuilder对象,然后append+号后面的字符串。
StringBuilder 
  1. 可变字符串对象。
  2. 线程不安全。
StringBuffer 
  1. 可变字符串对象。
  2. 线程安全。
数组
  1. 一种线性数据结构,使用连续的存储空间存放相同数据类型的集合容器。
  2. 存储和访问效率高,时间复杂度O(1)。
  3. 删除数据需要重排后面的数据,时间复杂度O(n)。
  4. 初始化时需要指定长度,长度不可变。
  5. 可通过复制的方式扩容长度。
  6. 支持存储基本数据类型。
Collection 
  1. 可以存储多个不同对象的容器。
  2.  不直接存储对象,而是对象的引用。
  3. 不能存储基本数据类型。
List 
  1. 继承了Collection的有序列表。
  2. 通过索引访问列表元素。
ArrayList 
  1. List接口的动态数组实现,容量不足时按1.5倍扩容。
  2. 初始化的默认容量为10。
  3. 访问速度快。
  4. 线程不安全。
  5. 在添加大量元素时,如果已知元素数量,使用ensureCapacity()方法先进行扩容,避免添加元素过程中的多次扩容。
  6. 实现了Cloneable接口,可以被复制,但是是浅拷贝。
LinkedList
  1. List接口的链表实现。 
  2. 插入和删除元素的性能优越,时间复杂度O(1)。
  3. 线程不安全。
Collections 

        Collections是集合的一个辅助工具类,它包含了很多集合操作的静态方法,用于实现集合的搜索、排序、线程安全化等操作。

Map

        键值对映射的抽象接口,一个键对应一个值。

HashMap 
  1. 基于map接口的非同步实现。
  2. 线程不安全。
  3. key和value可以null,key不能重复,所以只有一个key可以为null。
  4. 初始容量16,容量建议2的N次方,能提高计算机的执行效率。
  5. 扩容阈值默认0.75。
  6. 每次扩容为原容量的两倍。
  7. 底层采用数组+链表+红黑树实现,数组的每个元素存储一个单向链表,当链表的长度达到8时,就会转换成红黑树。转换的目的是当链表中元素较多时,也能保证HashMap的存取效率(备注:链表转为红黑树只有在数组的长度大于等于64才会触发)。
ConcurrentHashMap 
  1. concurrentHashMap是一个支持并发更新和查询的HashMap。
  2. 资源所的粒度是key的槽位,而非整个列表,很大程度上提高并发的性能。
  3. 在理想状态下,ConcurrentHashMap 可以支持 16 个线程执行并发写操作(如果并发级别设为16),及任意数量线程的读操作。
 Fail-Fast机制

        一种错误机制,当多个线程对同一个集合的内容进行操作时,就可能发生fail-fast事件。

        modCount:集合内部记录集合修改次数的属性,每次修改,modCount+1。

        expectModCount:迭代器内部记录集合的修改次数,初始化时会将集合当前的修改次数记录下来,迭代器修改集合元素时,modCount、expectModCount均+1。

        集合的fail-fast机制:迭代器遍历的每次循环开始时候,expectModCount会和modCount比较,如果不相等,就认为有别的线程修改了集合,则会抛出ConcurrentModificationException异常。

泛型 
  1. 本质是参数类型化,就是把数据类型当做一个参数。
  2. 使用泛型可以避免显示的强制类型转换,增加代码的可读性。
  3. 使用泛型能够降低运行时的类型转化异常,提高代码健壮性。 
ArrayList 和 LinkedList 的区别有哪些 
  1. ArrayList基于数组,LinkedList基于链表。
  2. ArrayList访问速度快,LinkedList删除、修改速度快。
有数组了为什么还要搞个 ArrayList

        我们常说的数组是定死的数组,ArrayList 却是动态数组。 

http://www.lryc.cn/news/253304.html

相关文章:

  • [Rust] 可迭代类型, 迭代器, 如何正确的创建自定义可迭代类型
  • MySQL中,text,mediumtext, 和 longtext字符类型
  • 网页开发 JS基础
  • 如何在财税行业查找批量客户?
  • IntelliJ IDEA详细完整安装教程
  • 【.NET Core】Linq查询运算符(一)
  • Python sorted函数及用法以及如何用json模块存储数据
  • 使用opencv将sRGB格式的图片转换为BT.2020格式【sRGB】【BT.2020】
  • 聊天注意事项
  • 12.5 作业
  • 深入理解指针3
  • 大数据环境下在线考试系统安全策略研究
  • Python中程序的异常处理
  • 有趣的代码——有故事背景的程序设计3
  • 聚观早报 |国行PS5轻薄版开售;岚图汽车11月交付7006辆
  • Kafka 保证消息消费全局顺序性
  • 3分钟在CentOS 7上离线安装Docker
  • GaussDB数据库SQL系列-触发器
  • 网工学习10-IP地址
  • 二百零八、Hive——HiveSQL异常:Select查询数据正常,但SQL语句加上group by查询数据为空
  • Docker—共享应用程序
  • Linux横向移动
  • Ubuntu 20.0 + mysql 8.0 用户和密码修改
  • 看懂lscpu的输出
  • RoPE旋转位置编码浅析
  • 在 SQL Server 中备份和恢复数据库的最佳方法
  • Java8 根据自定义属性去重
  • Netty网络编程
  • 层三交换机解析(Layer 3 Switch)层3交换机
  • expect自动化交互