Java面試題目之備忘八

2021-08-30 19:07:46 字數 1467 閱讀 9015

請問arraylist,linkedlist以及vector的區別?

1 arraylist底層實際是採用陣列實現的(並且該陣列的型別是object型別的)

2 如果是jdk6的話,採用array.of()方法來生成乙個新的陣列,如果是jdk5.0,

使用的是system.arraycopy()方法

3 list list = new arraylist();時,底層會生成乙個長度為10的陣列來存放物件引用;

4 對於arraylist與vector來說,底層都是採用陣列方式來實現的(該陣列是乙個object型別的是陣列)

5 對於arraylist,所有方法都不是同步的,對於vector,大部分的public方法都是同步的;

stringbuffer(vector類似) stringbuilder(arraylist類似)

6 對於arraylist,查詢速度非常快,增加和刪除操作非常慢。(本質是有陣列的特點來決定的)

7 對於linkedlist,查詢速度非常慢,增加和刪除非常快。(本質上是由雙向迴圈鍊錶的特點來決定的)

hashtable的應用非常廣泛,hashmap是新框架中用來代替hashtable的類,也就是說建議使用hashmap,不要使用hashtable。可能你覺得hashtable很好用,為什麼不用呢?這裡簡單分析他們的區別。 

1.hashtable的方法是同步的,hashmap未經同步,所以在多執行緒場合要手動同步hashmap這個區別就像vector和arraylist一樣。

2.hashtable不允許null值(key和value都不可以),hashmap允許null值(key和value都可以)。

3.hashtable有乙個contains(object value),功能和containsvalue(object value)功能一樣。

4.hashtable使用enumeration,hashmap使用iterator。

以上只是表面的不同,它們的實現也有很大的不同。

5.hashtable中hash陣列預設大小是11,增加的方式是 old*2+1。hashmap中hash陣列的預設大小是16,而且一定是2的指數。

6.雜湊值的使用不同,hashtable直接使用物件的hashcode,**是這樣的:

int hash = key.hashcode();

int index = (hash & 0x7fffffff) % tab.length;

而hashmap重新計算hash值,而且用與代替求模:

int hash = hash(k);

int i = indexfor(hash, table.length);

static int hash(object x) 

static int indexfor(int h, int length) 

以上只是一些比較突出的區別,當然他們的實現上還是有很多不同的,比如

hashmap對null的操作

Java面試題目之備忘十二

public class threadtester catch interruptedexception e t2.start class c catch interruptedexception e system.out.println hello public synchronized void...

Java面試題目之備忘十四

1 關於httpservlt中的service,doget,dopost方法的關係 首先客戶端提交乙個請求,該請求一定是首先到達了service方法,然後service方法根據請求中的引數內容是get,還是post 或者其他方式來決定到底是呼叫doget,還是dopost,還是其他的do方法。2 請...

Java面試題目之備忘十五

關於servlet 的生命週期 1 初始化階段 init方法被呼叫 客戶端第一次訪問該servlert,那麼該servlet將被例項化,緊接著,init方法被呼叫,注意 該init方法在servlet的整個生命週期中僅執行一次。2 服務階段 service方法被呼叫 客戶端每發來一次請求,該serv...