這些java集合Collection和Map相關的面試題你掌握了嗎?

1.簡述集合體系?(區別單列集合)

答:

集合分為單列集合和雙列集合。單列集合的頂層是Collection。雙列集合的頂層介面是Map。

我們先來說下單列集合:單列集合Collection有2個孩子,是List集合和Set集合。

List集合的特點:有序(存取一致),可重複。

Vector:JDK1.0出現的,底層的數據結構是數組,所以查詢快,增刪慢。它是線程安全的,所以效率低。

ArrayList:JDK1.2出現的,底層數據結構是數據,所以查詢塊,增刪慢。它是線程不安全的,所以效率高。

LinkedList:底層數據結構是鏈表。查詢慢,增刪快。線程不安全,效率高。

Set集合的特點:無序,唯一

Advertisements

HashSet:底層的數據結構是哈希表,線程不安全,效率高

LinkedHashSet:是Set集合中唯一一個有序的集合。底層的數據結構是鏈表,線程不安全,效率高。

TreeSet:底層的數據結構是二叉樹,是線程不安全的,效率高。

雙列集合:

雙列集合Map有3個孩子,是Hashtable、HashMap和TreeMap集合。

Hashtable:JDK1.0出現的,底層數據結構是Hash表,是線程安全的,效率低。不可以存儲null鍵和null值

HashMap:JDK1.2出現的,底層數據結構是Hash表,是線程不安全的,效率高。可以存儲null鍵和null值。

TreeMap:底層數據結構是二叉樹,是線程不安全的,效率高

Advertisements

補充:Set集合是如何保證元素的唯一性的?

答:

HashSet:保證元素唯一性,依賴的是HashCode方法和equals方法

TreeSet:保證元素唯一性,依賴的是自然排序和比較器排序。

自然排序:實現comparable介面,重寫裡面的CompareTo(Object obj)方法。

比較器排序:實現Comparator介面,並重寫裡面的Compare(Object o1, Object o2)方法。

【負左,正右,零不加。|前-后是升序,后-前是降序】

2.什麼時候使用什麼集合?

答:

具體看需求。

首先看是用單列還是雙列,

如果是單列的話[Collection集合],然後看是否要求元素唯一,如果唯一[Set集合],看是否要求排序,排序的話,就是TreeSet,否則就是HashSet,如果不明確就是HashSet。

如果是單列集合,不要求元素唯一,就是[list集合],看是否要求安全,是就用Vector,不要求安全,就看是查詢多還是增刪多,如果增刪多,就用LinkedList,如果查詢多,就用ArrayList,如果需求不明確,就用ArrayList。

如果是雙列集合,看是否要求排序,如果是就是TreeMap,如果不是就HashMap。如果需求不明確,就是HashMap

3.Collection(單列)和(Map)雙列的區別?

答:

Collection是單列結合的根介面,裡面定義了整個單列集合體系的共性內容。

它的子體系Set體系具有唯一性,數據結構針對元素有效。

Map 是雙列結合的根介面,裡面定義了整個雙列結合體系的共性內容。

它的鍵具有唯一性,數據結構針對鍵有效

4.遍歷集合(分單列集合和雙列集合)的方式有哪些?

答:

單列集合:

共性的有3種:

1、集合轉數組,toArray()

2、普通迭代器

3、增強for

List體系特有的:ListIterator列表迭代器、get()+size()方法

雙列集合:

鍵集keyset()+get()

鍵對集entrySet()+getKey()+getValue()

5.用迭代器和增強for遍歷集合,能否用集合的方法,操作集合?

答:

不能,會出現併發修改異常,ConcurrentModificationException。

併發修改異常,產生的原因:是使用普通迭代器或者增強for,在遍歷結合的時候,向集合中添加元素

解決的方案:使用列表迭代器ListIterator,注意在添加元素時,調用 add方法的是列表迭代器,不是集合本身。

6.泛型是什麼?有什麼好處?

答:泛型是泛指某種特定的數據類型,是JDK1.5出現的新特性。

好處:

(1)提高了安全性。(不會出現類型轉換異常)

(2)將運行時期會可能出現的異常轉移到編譯期

(3)優化程序設計。(定義為泛型后,我們的程序可以放多種數據類型的一種)

(4)避免了強制類型轉換的麻煩。

7、向上限定和向下限定?

? super E: 固定下邊界,向上限定,E及E的父類。

? extends E:固定的上邊界,向下限定,E及E的子類。

8.字典排序,自然排序和比較器排序是什麼?

答:字典排序按照字典上的順序升序排序。 A-Z

自然排序是實現Comparable介面,重寫compareTo()方法,根據返回值進行排序。負左,正右 ,0不變

比較器排序是實現Comparator介面,重寫compare()方法,根據返回值進行排序。

前-后是升序,后-前是降序。

9.Map有哪些取出元素的方式?原理是什麼?

答:鍵集。通過keySet()和get(Key)方法結合實現。

鍵對集。通過entrySet()和 getKey(),getValue()方法結合實現。

10.Collections 和 collection的區別?

答:

Collections是用來操作單列集合的工具類,裡邊定義了一些常用的操作單列集合的方法,比如說:sort(),binarySearch(),shuffle()

collection是單列集合的頂層介面,裡邊定義了整個單列集合體系的共性內容。

11.棧和隊列,鏈表和數組

棧結構:先進後出

隊列結構:先進先出

鏈表和數組的區別:

鏈表結構:每個元素指向下一個元素.特點是:增刪快,查找慢。

數組:一塊連續的存儲區域,每個元素都有編號,編號是從0開始的。特點是查詢快,增刪慢。

Advertisements

你可能會喜歡