Java 基础面试之集合

1.Collection接口 的实现类
答:Collection接口有3个子接口:List、Set、Queue
a.List(有序、可重复):的实现类有ArrayList、Vector、LinkList
ArrayList、Vector底层是通过数组实现的,LinkList是通过双向链表实现的。Vector支持线程同步。

b.Set(无序、不可重复)实现类有 HashSet(基于哈希表,可以为null)和TreeSet(基于二叉树,不可为null)
补充:
Set是如何去重复的?
答:Set在进行add()操作时,会 调用(先)hashCode、(后 这样会提升查询速度)equals方法和已经存在的对象比较。
若重复就不会添加。

c. Queue:实现类有 Deque:底层是是数组,有2个标志位指向数组的头与尾实现双端队列。

补充:Map接口没有显示继承类。java.lang,Object.
HashMap是无序的,但是它的子接口类LinkHashMap是有序的。

2.HashMap的key是否可以重复?
答:key的“重复”表现在toString()上,但是本质上它们的hashcode是不一样的,即引用地址不一样。
所以Key不可以是重复的。

3. 请问 ArrayList、HashSet、HashMap 是线程安全的吗?如果不是我想要线程安全的集合怎么办?

答:都不是线程安全的,集合中只有Vector(不需要知道元素类型)和hashtable是线程安全。

可以通过调用Collections工具类提供API来实现线程同步

Java 基础面试之集合_List


4. ArrayList 内部用什么实现的?

答:内部是有Object[] 实现的。(vector同样如此)

5.集合的种类?
答: 普通集合通常性能最高,但是不保证多线程的安全 性和并发的可靠性。
线程安全集合仅仅是给集合添加了 synchronized 同步锁,严重牺牲了性能,而且对并发的效率就 更低了,
并发集合则通过复杂的策略不仅保证了多线程的安全又提高的并发时的效率。
ConcurrentHashMap、ConcurrentLinkedQueue。

6.集合的实现类
答:List集合有3个实现接口;
List :Vecoter、ArrayList、LinkList
Map:HashMap、LinkHashMap
Set:HashSet、TreeSet、LinkHashSet

HashMap和HashTable的区别:
1.HashMap 对象的 key、value 值均可为 null。 HahTable 对象的 key、value 值均不可为 null。。
2.HashTalle是线程安全的,而HashMap不是线程安全的。

7.Collections工具类提供哪些方法?
a.使用集合中的某一字段,对集合进行排序:Collections.sort()

Collections.sort(list2,new Comparator<Employer2>(){
@Override
public int compare(Employer2 a2, Employer2 b2) {
return a2.getOrder().compareTo(b2.getOrder());
}

});

b. 对集合进行随机排序: Collection.shuffle(List)
c. 查找指定集合中的元素,返回所查找元素的索引 :Collections.binarySearch(List, “o”);
d.求最大值:max
e.求最小值:min
f.首次/最后一次 出现元素的索引 Collections.indexOfSubList(list, subList)/Collections.lastindexOfSubList(list, subList)
g. 替换批定元素为某元素,若要替换的值存在刚返回true,反之返回false
Collections.replaceAll(list, “a”, “b”)
f. 反转集合中元素的顺序:reverse()

Java 基础面试之集合_线程安全_02