java常用集合比较

 

 

1.   请写出ArrayList和LinkedList和Vector的区别?

Arraylist和vector底层是数组结构,linkedlist是链表结构。Linkedlist查询慢,增删快。

Arraylist不同步,vector同步。Arraylist比vector快,arraylist在最大容量时在原来的基础上增加一倍,vector增加0.5倍。

2.   java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。

3.   请写出String,StringBuffer和StringBuilder的区别?

String不可改变,后两个可以改变。StringBuilder线程不安全,stringbuffer线程安全。

4.   请写出线程中start()和run()方法的区别?

Run是直接调用该方法,并没有启用一个新的线程。Start是启动一个新的线程,从run中上执行。

5.   final、finally、finalize之间有何差异?

Final是最终类,不可更改。Finally是异常抛出,无论是否try-catch最后都要执行,除非跳出jvm。Finalize是垃圾回收机制的执行,继承于object类,但垃圾回收不可控制。

6.   请写出wait()和sleep()方法的区别?

他两者都是使线程休眠,但sleep是thread类的方法,不能改变对象锁,所以不能释放锁,而wait则是在线程休眠时将锁释放掉,使其他线程可以访问锁对象。

7.   至少从3方面写出UDP和TCP的区别?

Tcp有连接,udp无连接。 Tcp要求系统资源多,udp较少。Tcp保证数据正确性,udp可能丢包。

Tcp保证数据顺序,udp不保证。

8.   简述HashSet去重复的工作原理?

当把对象加入到HashSet时,它会用对象的hashcode值来判断加入位置。同时它也会拿这个新值与已经加入的值作比较。如果没有相符的hashcode,HashSet就会假设新对象没有重复出现。如果hashcode相同,也不能代表两个对象相等。需要进一步调用equals()来对比是否两个对象相同。

9.   Java的对象反射是什么?它有什么用?

在运行时,对于任何一个类我们可以知道他的所有属性和方法,对于任何一个对象,我们调用他的任意一个方法和属性。

作用:我们可以再运行时探知一个未知的类,获得其完整结构。

10.   HashMap和HashTable有何不同?


Hashmap值键可以为空,hashtable不可以。

Hashtable是同步的,hashmap不是。

Hashtable慢,hashmap快。

 

11.   如何决定选用HashMap还是TreeMap?

经常插入删除定位用hashmap,对有序数组进行遍历用treemap。

13.ArrayList和Vector有何异同点? 

 ArrayList和Vector在很多时候都很类似。

 

  (1)两者都是基于索引的,内部由一个数组支持。

 

  (2)两者维护插入的顺序,我们可以根据插入顺序来获取元素。

 

  (3)ArrayList和Vector的迭代器实现都是fail-fast的。

 

  (4)ArrayList和Vector两者允许null值,也可以使用索引值对元素进行随机访问。

 

  以下是ArrayList和Vector的不同点。

 

  (1)Vector是同步的,而ArrayList不是。

 

  (2)ArrayList比Vector快,因为同步,。

 

  (3)ArrayList容量增长1倍,vector增长0.5倍。

14.ArrayList和LinkedList有何区别?

(1)ArrayList是由Array所支持的基于一个索引的数据结构,所以它提供对元素的随机访问,复杂度为O(1),但LinkedList存储一系列的节点数据,每个节点都与前一个和下一个节点相连接。所以,尽管有使用索引获取元素的方法,内部实现是从起始点开始遍历,遍历到索引的节点然后返回元素,时间复杂度为O(n),比ArrayList要慢。

 

  (2)与ArrayList相比,在LinkedList中插入、添加和删除一个元素会更快,因为在一个元素被插入到中间的时候,不会涉及改变数组的大小,或更新索引。

 

  (3)LinkedList比ArrayList消耗更多的内存,因为LinkedList中的每个节点存储了前后节点的引用。

 

.List和set接口的区别

List:1.可以允许重复的对象。

   2.可以插入多个null元素。

       3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

       4.常用的实现类有 ArrayList、LinkedList和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

Set:1.不允许重复对象

    2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator  或者 Comparable 维护了一个排序顺序。

       3. 只允许一个 null 元素

       4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

 

6.内部比较器Comparable和外部比较器Comparator

"Comparable"  它是一个排序接口,只包含一个函数compareTo()。

 一个类实现了Comparable接口,就意味着“该类本身支持排序”,它可以直接通过Arrays.sort() 或 Collections.sort()进行排序。

 "Comparator"   它是一个比较器接口,包括两个函数:compare()和 equals()。

 一个类实现了Comparator接口,那么它就是一个“比较器”。其它的类,可以根据该比较器去排序。

  综上所述:Comparable是内部比较器,而Comparator是外部比较器。

  一个类本身实现了Comparable比较器,就意味着它本身支持排序;若它本身没实现Comparable,也可以通过外部比较器Comparator进行排序。

 

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页