面试题汇总三 Java 集合篇

本文汇总了Java集合面试中常见的问题,包括Collection与Collections的区别、HashMap的实现原理、并发容器如ConcurrentHashMap的工作机制,以及Java集合框架中的各种数据结构和操作。详细探讨了集合中的 equals 方法、List、Set、Map 的特性,以及线程安全问题和失败机制。
摘要由CSDN通过智能技术生成

前言

题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳

 


目录

前言

集合

Collection 和Collections 的区别?

修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?

List,Set,Map的区别

List和Map的实现方式以及存储方式

HashMap的实现原理

HashMap如何put数据(从HashMap源码角度讲解)?

HashMap的扩容操作是怎么实现的?

HashMap在JDK1.7和JDK1.8中有哪些不同?

ConcurrentHashMap的实现原理

HashTable实现原理

HashMap和HashTable的区别

ArrayMap和HashMap的对比

HashMap与HashSet的区别

集合Set实现Hash怎么防止碰撞

数组和链表的区别

Array和ArrayList有何区别?什么时候更适合用Array

EnumSet是什么?

Comparable和Comparator接口有何区别?

Java集合的快速失败机制 “fail-fast”?

fail-fast 与 fail-safe 之间的区别?

BlockingQueue是什么?

Iterator类有什么作用

poll()方法和remove()方法区别?

JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。


集合

Collection 和Collections 的区别?

Java中Collection和Collections的区别

Collection

java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

 Collection   
├List   
│├LinkedList   
│├ArrayList   
│└Vector   
│ └Stack   
└Set

public interface Collection<E> extends Iterable<E> {
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    Iterator<E> iterator();
    Object[] toArray();
    <T> T[] toArray(T[] a);
    boolean add(E e);
    boolean remove(Object o);
    boolean containsAll(Collection<?> c);
    boolean addAll(Collection<? extends E> c);
    boolean removeAll(Collection<?> c);
    default boolean removeIf(Predicate<? super E> filter) {...}
    boolean retainAll(Collection<?> c);
    void clear();
    boolean equals(Object o);
    int hashCode();
    default Spliterator<E> spliterator() {...}
    default Stream<E> stream() {...}
    default Stream<E> parallelStream() {...}
}

Collections

Collections 则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

 

修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?

该对象超类Object 类的equals方法

 

List,Set,Map的区别

三大集合:List、Map、Set的区别与联系

List:单列集合,元素有序,可重复

Set:单列集合,元素无序,不可重复

Map:双列集合,元素无序,key 不可重复,value 可重复

 

List和Map的实现方式以及存储方式

jdk8集合类汇总介绍

我把所有的集合都整理到这里了

List

  • ArrayList:内部结构为数组,线程不安全,支持随机访问。
  • LinkedList:内部结构为链表,线程不安全。不支持随机访问,在头尾增删节点快,但查找需要遍历比较慢。实现了 Deque 和 Queue 接口。
  • CopyOnWriteArrayList:内部结构为数组,线程安全。发生修改时,会先创建副本并在此之上修改,再将引用指向副本。修改操作需要 ReentrantLock 同步。
  • Vector:内部结构为数组,线程安全,修改方法使用 synchronized 同步。
  • Stack:继承 Vector,线程安全。因为用到 synchronized,有性能问题,推荐用 ArrayDeque 代替。

Map

  • HashMap:内部结构为数组+链表,1.8之后链表过长(默认8节点)会转化为红黑树。线程不安全。无序。key 和 value 可以为 null。
  • TreeMap:内部结构为红黑树。线程安全。按制定方式排序。默认比较器下 key 不为 null。
  • LinkedHashMap:线程不安全。结构 HashMap 类似,不过内部维护有节点插入顺序的链表,所以遍历时元素按插入顺序排序。
  • ConcurrentHashMap:HashMap 的线程安
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值