11月13日面試
阿新 • • 發佈:2018-11-28
今天面試總結:
- List,set,Map介面的區別,list如何去重?
回答的時候,僅僅在想介面中的方法的區別。就是一臉懵逼,如何從方法中去比較異同,後來查了查,是從資料結構去解釋。
- List和Set介面的基類是Collections, Map就是map類集合的基類。
- List的實現有LinkedList連結串列結構,ArrayList陣列結構。Set有hash表結構HashSet,紅黑樹結構TreeSet。 Map有雜湊結構HashMap,紅黑樹結構TreeMap。
- List及實現類是可變大小的列表,適用於按陣列索引訪問元素。Set介面繼承了Collection介面,但是它不允許集合中存在重複項。Map中以鍵-值對形式儲存資料。
去重的方法:(三種)
- 藉助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); }
- 利用LinkedHashSet不能重複新增資料並能保持新增順序的特性
public void removeDuplicate(ArrayList<String> list){
LinkedHashSet<String> set = new LinkedHashSet<>(list.size());
set.addAll(list);
list.clear();
list.addAll(set);
}
- 通過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程式在執行過程中,類,物件以及它們成員載入、初始化的順序如下:
- 首先載入要建立物件的類及其直接與間接父類。
- 在類被載入的同時會將靜態成員進行載入,主要包括靜態成員變數的初始化,靜態語句塊的執行,在載入時按程式碼的先後順序進行。
- 需要的類載入完成後,開始建立物件,首先會載入非靜態的成員,主要包括非靜態成員變數的初始化,非靜態語句塊的執行,在載入時按程式碼的先後順序進行。
- 最後執行構造器,構造器執行完畢,物件生成。
併發
這個問題問了無數次,每次都答不好,心態炸了。。。
晚上整理了下,知識樹體系。