JAVA集合相关问题

Java 集合框架中都包括哪些接口?

Java 集合框架包括以下接口:Collection 接口、List 接口、Set 接口、Queue 接口、Map 接口。
List:底层是数组,有序可重复的列表,线程不安全,可以根据下标或迭代器访问元素。常用实现类有ArrayList、LinkedList、Vector。
Set:无序不可重复,只能用迭代器取得元素,常用实现类有HashSet、TreeSet、LinkedHashSet。
Map:键值对的映射表,元素无序、不可重复,线程不安全,可以根据键来访问值,常用实现类有HashMap、TreeMap、LinkedHashMap。
Queue:队列,常用实现类有LinkedList、PriorityQueue、BlockingQueue。
List和Set实现了collection接口,

ArrayList 和 LinkedList 的区别是什么?

ArrayList 是动态改变数组大小的一个类,它的底层是数组实现,支持下标访问,时间复杂度O(1),查询快,需要连续内存存储,存储在堆内存中。
LinkedList 是一个双向链表,它的底层是链表实现,遍历查找获取元素,时间复杂度O(n),插入和删除快,每个数据都有一个头和尾指针,需要更多内存,可以分散存储,存储在堆内存中。
因此,ArrayList 支持随机访问和快速插入,而 LinkedList 支持快速插入和删除操作。

HashMap 1.7和1.8的区别

1、存储结构:在1.7中,HashMap采用数组和链表的数据结构实现。而在1.8中,当链表的长度达到一定阈值时,会将链表转换为红黑树,以提高查找的效率。
2、迭代顺序:在1.7中,迭代HashMap时不保证元素的顺序,而在1.8中,迭代顺序和元素的插入顺序保持一致。
3、扩容方式:在1.7中,HashMap的扩容方式是将容量扩大一倍,并且要重新计算每个元素的位置。而在1.8中,当需要扩容时,会将容量扩大为原来的两倍,并且不需要重新计算每个元素的位置,提高了扩容的效率。
4、并发安全性:在1.7中,HashMap不是线程安全的,如果多个线程同时操作一个HashMap可能会导致数据不一致。而在1.8中,引入了读写分离的思想,在大多数情况下,多个线程可以同时读取HashMap,只有在写入时才需要加锁。
5、性能优化:在1.8中,对HashMap进行了性能优化,包括减少哈希碰撞、减少链表长度、使用红黑树等方式来提高HashMap的性能。

HashMap 和 HashTable 的区别是什么?

HashMap 允许 null 键和 null 值,线程不安全,HashMap 默认的初始容量为 16,扩容因子为 0.75,JDK1.8后默认初始容量为16,但扩容因子为0.5,当 HashMap 中的键值对数量达到容量和负载因子的乘积时,会触发扩容操作,扩容为原来的两倍;
HashTable 不允许 null 键和 null 值,线程安全,默认的初始容量是11,扩容因子为0.75,扩容机制是翻倍再+1。
HashMap 是非线程同步的,多线程环境下需要手动进行同步处理。HashTable 在多线程环境下是线程安全的,在性能上比 HashMap 差。

HashMap和ConcurrentHashMap的区别

1、基本概念:HashMap是基于哈希表的Map接口的实现,而ConcurrentHashMap是一个支持高并发更新与查询的哈希表。
2、底层数据结构:HashMap的底层结构是数组+链表,而当链表长度大于一定阈值时,会将链表转换为红黑树。ConcurrentHashMap的底层结构是数组+链表+红黑树,其中数组由一系列的Segment组成,每个Segment包含一个链表。
3、线程安全属性:HashMap是线程不安全的,当多线程同时操作HashMap时,会产生安全隐患。ConcurrentHashMap是线程安全的,它提供了线程安全的操作方法,可以在多线程环境下安全使用。
4、对整个桶数组的处理方式:当HashMap的负载因子大于一定阈值时,会进行扩容。ConcurrentHashMap的每个Segment都是一个独立的HashMap,负载因子只和单个Segment有关,因此它不需要全局的扩容。
5、性能:在高并发环境下,由于ConcurrentHashMap采用了锁分段技术,并将每个Segment作为一个独立的线程安全对象进行操作,因此它的并发性能通常优于HashMap。

TreeMap 和 HashMap 的区别是什么?

TreeMap 是有序的,可以根据 Key 的值进行排序;
HashMap 是无序的,查询快。

TreeSet 和 HashSet 的区别是什么?

HashSet 是基于HashMap的实现,它存储唯一的元素,没有顺序;
TreeSet 是基于TreeMap的实现,它可以按照自然顺序或者自定义顺序存储元素,并且保证元素的唯一性。

Collection 和 Collections 有什么区别?

Collection 是 Java 集合框架中的一个接口,用于管理一个对象元素的集合;
Collections 是 Java 集合框架中一个包含静态方法的工具类,它提供了一组快速完成常用的操作的方法,如排序、查找等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值