11月13日面試

今天面試總結:

  • List,set,Map接口的區別,list如何去重?

回答的時候,僅僅在想接口中的方法的區別。就是一臉懵逼,如何從方法中去比較異同,後來查了查,是從數據結構去解釋。

  1. List和Set接口的基類是Collections, Map就是map類集合的基類。
  2. List的實現有LinkedList鏈表結構,ArrayList數組結構。Set有hash表結構HashSet,紅黑樹結構TreeSet。 Map有哈希結構HashMap,紅黑樹結構TreeMap。
  3. List及實現類是可變大小的列表,適用於按數組索引訪問元素。Set接口繼承了Collection接口,但是它不允許集合中存在重複項。Map中以鍵-值對形式存儲數據。

去重的方法:(三種)

  1. 藉助Set結構,不允許元素重複的特性
public void removeDuplicate(ArrayList<String> list){
	HashSet<String> set = new HashSet<>();
	List<String> result = new Array<>();
	list.forEach(element->{
		if(set.add(element)){
			result..add(element);
		}
	});
	list.clear();
    list.addAll(result);
}
  1. 利用LinkedHashSet不能重複添加數據並能保持添加順序的特性
public void removeDuplicate(ArrayList<String> list){
	LinkedHashSet<String> set = new LinkedHashSet<>(list.size());
	set.addAll(list);
    list.clear();
    list.addAll(set);
}
  1. 通過list的contains解決
public void removDuplicate(ArrayList<String> list){
	ArrayList<String> result= new Array<>();
	list.forEach(element->{
		if(!result.contains(element)){
			result.add(element);
		}
	});
	list.removeAll();
	list.addAll(result);
}

java程序在執行過程中,類,對象以及它們成員加載、初始化的順序如下:

  1. 首先加載要創建對象的類及其直接與間接父類。
  2. 在類被加載的同時會將靜態成員進行加載,主要包括靜態成員變量的初始化,靜態語句塊的執行,在加載時按代碼的先後順序進行。
  3. 需要的類加載完成後,開始創建對象,首先會加載非靜態的成員,主要包括非靜態成員變量的初始化,非靜態語句塊的執行,在加載時按代碼的先後順序進行。
  4. 最後執行構造器,構造器執行完畢,對象生成。

併發

這個問題問了無數次,每次都答不好,心態炸了。。。
晚上整理了下,知識樹體系。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章