文章标题

1.Java的HashMap是如何工作的?

HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。

HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象。当我们将键值对传递给 put ()方法时,它调用键对象的 hashCode ()方法来计算 hashcode,让后找到 bucket 位置来储存值对象。当获取对象时,通过键对象的 equals ()方法找到正确的键值对,然后返回值对象。HashMap 使用 LinkedList 来解决碰撞问题,当发生碰撞了,对象将会储存在 LinkedList 的下一个节点中。 HashMap 在每个 LinkedList 节点中储存键值对对象。

2.哪一个List实现了最快插入?

LinkedList和ArrayList是另个不同变量列表的实现。ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用。LinkedList的优势在于在中间位置插入和删除操作,速度是最快的。

LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

ArrayList实现了可变大小的数组。它允许所有元素,包括null。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

3.Iterator和ListIterator的区别

●ListIterator有add()方法,可以向List中添加对象,而Iterator不能。
●ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

●ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
●都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

4.Hashmap如何同步?

当我们需要一个同步的HashMap时,有两种选择:

●使用Collections.synchronizedMap(..)来同步HashMap。
●使用ConcurrentHashMap的

这两个选项之间的首选是使用ConcurrentHashMap,这是因为我们不需要锁定整个对象,以及通过ConcurrentHashMap分区地图来获得锁。

5.IdentityHashMap和HashMap的区别

IdentityHashMap是Map接口的实现。不同于HashMap的,这里采用参考平等。

●在HashMap中如果两个元素是相等的,则key1.equals(key2)

●在IdentityHashMap中如果两个元素是相等的,则key1 == key2

6.为什么Map接口不继承Collection 接口?

· Set 是无序集合,并且不允许重复的元素

· List 是有序的集合,并且允许重复的元素

· 而Map 是键值对

· 它被视为是键的set 和值的 set 的组合

· Map 被设计为键值对的集合,所以不需要继承 Collection 接口

7.HashMap和Hashtable之间的区别?

· 同步或线程安全

· Null 键和 Null 值

· 迭代值

· 默认容量大小

8.如何对Object的list排序?

· 对objects 数组进行排序,我们可以用 Arrays.sort() 方法

· 如果要对objects 的集合进行排序,需要使用 Collections.sort() 方法

9.Java 中 Set 与 List 有什么不同?

· Set 是一个不允许重复元素存在的集合

· Set 没有索引

· Set 仅仅允许一个 null 值

· Set 有类: HashSet 、 LinkedHashMap 、 TreeSet

· List 有索引

· List 允许 N 个 null 值

· List 可以按插入顺序显示

· List 有类: Vector 、 ArrayList 、 LinkedList

10.arraylist 与 vector 的区别?

· Vector 在 Java 的第一个版本就引入了,也就是说 vector 是一个合法规范的类

· ArrayList 在 Java1.2 版本引入的,是 Java 集合框架的组成部分

· Vector 是同步的

· ArrayList 是不同步的

11.arraylist 与 vector 的区别?

· Vector 在 Java 的第一个版本就引入了,也就是说 vector 是一个合法规范的类

· ArrayList 在 Java1.2 版本引入的,是 Java 集合框架的组成部分

· Vector 是同步的

· ArrayList 是不同步的

12.什么类实现了List接口?

· ArrayList

· LinkedList

· Vector

13.什么类实现了Set接口?

· HashSet

· LinkedHashSet

· TreeSet

14.如何保证一个集合线程安全?

· Vector, Hashtable, Properties 和 Stack 都是同步的类,所以它们都线程安全的,可以被使用在多线程环境中

· 使用Collections.synchronizedList(list)) 方法,可以保证 list 类是线程安全的

· 使用java.util.Collections.synchronizedSet() 方法可以保证 set 类是线程安全的

15.是否可以往 TreeSet 或者 HashSet 中添加 null 元素?

· 可以往 hashset 中添加一个 null

· TreeSet 也允许一个 null 值

16.解释下Collection的接口继承关系?

17.Iterator符合哪个设计模式?

· Iterator 设计模式

18.HashSet 实现了哪个数据结构?

· HashSet 内部实现了 hashmap

19.为什么 Collection 不能继承 Cloneable 和 Serializable?

· List 和 Set 唯一继承 Collection 接口

· SortedMap 继承了 Map 接口

20.hashCode() 和 equals() 方法的重要性?如何在Java中使用它们?

· hashCode() 和 equals() 方法定义在 “object” 类中

· 如果equals() 方法在比较 2 个对象时返回 true ,那么 hashCode() 的返回值必须得一样

21.array 和 arraylist 的区别?

· Array 类似 object 集合类型,大小固定

· Arraylist 是同质和异质元素的集合

22.什么是 Properties 类?

· Properties 是 Hashtable 的子类。它被用于维护值的 list ,其中它们的键、值都是 String 类型

你可能感兴趣的:(面试题,开发者,集合类,集合,map,set,list)