06.06 「javaSE基礎」2018面試-java集合(一)

1、HashMap上機題:已知一個HashMap<integer>集合, User有name(String)和age(Integer)屬性。請寫一個方法實現對HashMap的排序,該方法接受形參HashMap<integer>,返回類型為HashMap<integer>,要求對HashMap中的User的age倒序進行排序。排序時key=value鍵值對不能拆散。/<integer>/<integer>/<integer>

分析:首先清楚HashMap本身是不能排序的。這時候要想到API中是否有排序功能的集合,可以使用LinkedHashMap,它是Map結構,也是鏈表結構,有序的,而且還是HashMap的子類。一般出現這樣的題,儘量想到JDK的API中已有的方法解決。具體代碼和運行結構如下圖:

「javaSE基礎」2018面試-java集合(一)

HashMap排序實現圖

「javaSE基礎」2018面試-java集合(一)

HashMap排序結果打印圖

2、請問HashSet、HashMap、ArrayList集合是線程安全嗎?如果不是,如何使集合變為線程安全呢?

看過源碼就會知道,每個集合方法都沒有加鎖,顯然都是線程不安全的。在集合中Vector和HashTable倒是線程安全的(至於為什麼會是安全的,查看源碼會發現其實就是各自把核心方法添加上了sychronized關鍵字)。

Collections工具類提供了相應的API,可以讓上面3個線程不安全的集合變為安全的。

「javaSE基礎」2018面試-java集合(一)

使線程不安全的集合變線程安全

3、ArrayList內部是用什麼實現的?

用Object[]實現的。具體說明可以查看ArrayList源碼,分別從無參構造方法,有參構造方法,add,delete,remove方法說明。

4、併發集合和普通集合如何區別?

常見的併發集合有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque等,併發集合位於java.lang.concurrent包下,是JDK1.5以後才有的。

5、list三個子類的特點?

  • ArrayList底層結構是數組,底層查詢快,增刪慢;
  • LinkedList底層是鏈表結構,增刪快,查詢慢;
  • voctor底層是數組,線程安全,增刪慢,查詢慢。
「javaSE基礎」2018面試-java集合(一)


分享到:


相關文章: