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进行排序。