Java基础知识总结-集合框架

1. Comparable接口与Comparator接口的区别?

    Comparable接口:只提供一种排序方式;提供一个方法compareTo();在java.lang包中;实现此接口的类会被修改。

    Comparator接口:可提供多种排序方式;提供一个方法compare();存在于java.util包中;实现此接口的类不会被修改。

2. final、finally、finalize的区别?

    final是关键字,可用于修饰变量、方法、类;被修饰的变量不能修改、方法不能重写、类不能继承。

    finally:finally块用于异常控制中,总是会被执行。

    finalize:finalize()方法用于垃圾收集,此方法在对象被垃圾收集时调用,用于执行一些清除工作。

3. 能使List、Set、Map元素同步吗?

    可以,可以使用Collections工具类。    

public static List synchronizedList(List l) {}

public static Set synchronizedSet(Set s) {}

public static SortedSet synchronizedSortedSet(SortedSet s) {}

public static Map synchronizedMap(Map m) {}

public static SortedMap synchronizedSortedMap(SortedMap m) {}
4. 如何使用集合类只读?

    使用下面的方法:    

Collections.unmodifiableList(list);
Collections.unmodifiableSet(set);
Collections.unmodifiableMap(map);
5. 什么是WeakHashMap?

    一个具有弱Key的基于Map实现,其中的项会自动被删除。

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

    有三个类:

    ArrayList:可修改大小的数组实现,存储有序,非线程安全。

    Vector:ArrayList的线程安全实现,方法被synchronized封装。

    LinkedList:同时实现了Queue接口,中间的插入和删除操作性能优于ArrayList。

7. 什么是UnsupportedOperationException?

    用于表示不被支持操作的异常,常用于集合框架(java.util.Collections)中,UnmodifiableCollection会抛出这个异常,当执行添加和移除操作时。

8. 什么是gc()?

    gc()是一个守护线程,gc()方法定义在System类中,用于向JVM发送垃圾收集的请求。

9. List和Set的区别?

    List可存重复值,而Set不行。List保证存取顺序而Set不行。JDK中说HashSet不保证迭代顺序恒久不变,而LinkedHashSet可预知迭代顺序。

10. 什么是垃圾收集?

    垃圾收集是获取运行时不用对象的过程。为了内存管理而运行。

11. Collections类和Arrays类是什么?

    Collections类和Arrays类是工具类,用于支持集合框架核心类。它们提供有用的方法:只读、同步、排序集合框架类等。

    Arrays可帮助数组转换为集合对象,Arrays也有一些方法用于帮助一部分数组复制或其它一些功能。

12. 什么是Dictionary类?

    Dictionary类提供一些存储键-值对的功能。

13. HashMap和Hashtable的区别?

    Hashtable线程安全(synchronized)而HashMap不是。

    Hashtable不允许null键和null值,而HashMap无此限制。

    遍历方式不同,HashMap采用fail-fast原则的iterator方式,而hashtable采用enumerator方式。

14. 什么是ConcurrentHashMap?

    实现Map接口,线程安全。添加和移除同步而获取不同步。

    Hashtable是对象锁,ConcurrentHashMap是桶级锁,因此ConcurrentHashMap比Hashtable有更好性能。

15. 不用Vector,如何使ArrayList成为同步的(synchronized)?

    使用Collections类。

Collections.synchronizedList(List list);
Collections.synchronizedMap(Map list);
Collections.synchronizedCollection(Collection list);
16. Iterator和Enumeration的区别?

    遍历时iterator可以删除集合的元素,而此时集合本身不能添加或删除元素。

    Enumeration用于过时的类中,比如:Vector、Stack;而Iterator用于所有现代的集合类中。

    方法名不同:Enumeration的hasMoreElement()、nextElement()方法与Iterator的hasNext()、next()方法。

17. Queue和Stack的区别?

    队列-先入先出,栈-后进先出。队列可以通过remove()或poll()方法移除一个元素。Stack和Vector是线程安全的。

    对于先来先处理的应用,使用Queue,比如工作列表、请求处理。

    如果只从一端操作push和pop,使用Stack,比如递归算法。

18. 什么是IdentityHashMap?

    IdentityHashMap使用==代替equals()方法判断。这是为了性能问题考虑,可以阻止模仿。

19. 如何排序列表,以相反的顺序?

    从Collections.reverseOrder()方法获取一个倒序Comparator对象,然后传递给Collections.sort()方法。

List list = new ArrayList();
Comparator comp = Collections.reverseOrder();
Collections.sort(list, comp);

20. 有哪些实现Set接口的类?

    Set是不包含重复(equals方法判断)元素的集合,最多有一个null元素,有如下常用实现:HashSet、SortedSet、TreeSet。

    SortedSet是一个扩展Set的接口,这个接口允许数据递增排序或基于Comparable或Comparator接口排序,所有插入这个接口的数据都必须实现Comparable或Comparator接口。

    TreeSet实现了SortedSet接口,这个类对于基本操作(添加、移除、包含)的时间复杂度为log(n),这个类不是线程安全的。

    HashSet实现了Set接口,基于哈希表实现(一个HashMap实例),它不保证遍历次序,允许null值,常量时间复杂度实现基本操作(add、remove、contains、size),如果哈希算法实现各个元素分散在桶中。

21. 如何使一个集合线程安全?

    使用如下方法:

Collections.synchronizedList(list);
Collections.synchronizedSet(set);
Collections.synchronizedMap(map);

22. ArrayList和Vector的区别?

    ArrayList非线程安全,Vector线程安全。

    内部实现用一个数组,当空间够用时,Vector每次增加1倍,而ArrayList增加50%。

23. finalize()方法的作用?

    垃圾收集时调用,用于处理清除工作。

24. 数组和ArrayList的区别?

    数组创建固定大小而ArrayList创建可变大小。

    数组一旦创建,其元素不能添加和删除,而ArrayList可以动态添加和删除。

    ArrayList是一维的,而数组可以是多维的。

    创建数组需要预先知道大小,否则可能会造成内存浪费。而ArrayList是动态创建的,则不会有这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值