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 类型