1. 程式人生 > 其它 >Spring Boot 學習(一) 注意事項

Spring Boot 學習(一) 注意事項

1.Java容器有哪些?                                            

  Collection

List

  • ArrayList
  • LinkkedList
  • Vector
  • Stack

Set

  • HashMap
  • LinkedHashSet
  • TreeSet

  Map

  • HashMap
  • LinkedHashMap
  • TreeMap
  • ConcurrentHashMap
  • Hashtable

2.Collection和Collections是有什麼區別?                                 

  Collection

:是一個集合介面,它提供了對集合物件進行進步操作的通用介面方法,所有集合都是它子類,比如List、Set等。

  Collentions:是一個包裝類,包含了很多靜態方法,不能被例項化,就像一個工具類,比如提供的排序方法:Collentions.sort(list)。

3.List、Set、Map之間的區別是什麼?                                   

  List:元素是有序的,允許重複。

  Set:元素是無序的,不允許重複。

  Map:元素是無序的,key(是唯一的)不允許重複value允許重複。

4.HashMap和Hashtable有什麼區別?                                   

儲存:HashMap允許key和value為null,Hashtable不允許。

執行緒安全:Hashtable是執行緒安全的,HashMap是非執行緒安全的。

  Hashtable是保留類不建議使用,推薦在單執行緒的情況下使用HashMap替代,多執行緒的情況下使用ConcurrentHashMap替代。

5.如何決定使用HashMap還是TreeMap?                                 

  對於在Map中插入、刪除、定位一個元素這些操作,HashMap是最好的選擇,因為HashMap的插入會比TreeMap快,但要對key集合進行有序的遍歷,那麼TreeMap則是更好的選擇。

6.說一下HashMap實現原理                                        

  HashMap是基於Hash演算法實現的,通過put(key, value)方式儲存,get(key)獲取,當傳入key時HashMap會根據key.hashCode()計算出hash值,根據hash值講value儲存在bucket裡。當計算出hash值相同時(hash衝突),HashMap的做法是用連結串列和紅黑樹儲存相同hash值的value。當衝突個數比較少時,使用連結串列否則使用紅黑樹。

7.說一下HashSet的實現原理                                       

  HashSet是基於HashMap實現的,HashSet底層使用HashMap儲存所有元素,因此HashSet的實現比較簡單,相關HashSet操作基本都是直接呼叫底層HashMap的相關方法來完成,HashSet不允許值重複。

8.ArrayList和LinkedList的區別是什麼?                                

資料結構實現:ArrayList是動態陣列的資料結構實現,LinkedList是雙向連結串列的資料結構實現。

隨機訪問效率:ArrayList比LinkedList在隨機訪問的時候效率要高,因為LinkedList是線性的儲存方法,所以需要移動指標從前往後依次查詢。

新增和刪除效率:在非首尾的新增和刪除操作,LinkedList比ArrayList效率要高,因為ArrayList的增刪操作會影響陣列內的其他資料下標。

  需要頻繁讀取集合中的元素時,推薦使用ArrayList,而在新增和刪除操作較多時,更推薦使用LinkedList。

9.如何實現陣列和ArrayList的轉換?                                    

  陣列轉List:使用Arrays.asList(array)進行轉換。

  List轉陣列:使用List自帶的toArray()方法。

10.ArrayList和Vector的區別是什麼?                                  

  執行緒安全:ArrayList是非執行緒安全的,Vector使用了Synchronized來實現執行緒同步,是執行緒安全的。

  效能:ArrayList在效能方面要優於Vector。

  擴容:Vector每次擴容都會增加一倍,而ArrayList只會增加50%。

11.Array和ArrayList有什麼區別?                                     

Array可以儲存基本資料型別和物件,ArrayList只能儲存物件。

Array是指定固定大小的,而ArrayList大小可以自動擴充套件。

Array內建方法沒有ArrayList多,比如addAll、removeAll。

12.在Queue中poll()和remove()有什麼區別?                               

相同點:都是返回第一個元素,並在佇列中刪除。

不同點:如果沒有元素poll方法會返回一個null,remove方法會直接丟擲NoSuchElementException(無此元素)異常。

13.哪些集合類是執行緒安全的?                                      

  Vector、Hashtable、Stack和JDK1.5之後提供的ConcurrentHashMap都是執行緒安全的。

14.迭代器Iterator是什麼?                                        

  Iterator介面提供了遍歷任何Collection的介面,可以從Collection中使用迭代器方法獲取Iterator例項,迭代器允許呼叫者在迭代過程中刪除元素。

15.Iterator怎麼使用?有什麼特點?                                    

  Iterator的使用示例如下

List<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();
while(it.hasNext){
  String obj = it.next();
  System.out.pringln(obj);      
}
View Code

  Iterator的特點是更加安全,因為它可以確保,在當前遍歷的集合元素被更改的時候,就會丟擲ConcurrentModificationException(併發修改)異常。

16.Iterator和ListIterator有什麼區別?                                  

Iterator可以遍歷List、Set集合,而ListIterator只能遍歷List集合。

Iterator只能單向遍歷,ListIterator可以雙向遍歷(向前/向後)。

ListIterator從Iterator介面繼承,然後添加了一些額外的功能,例如新增一個元素、替換一個元素等。

17.怎麼確保一個集合不能被修改?                                     

  可以使用Collections.unmodifiableCollection(Collection c)(Collections的不可修改的集合)方法建立一個只讀集合,這樣改變集合的任何操作都會丟擲java.lang.UnsupportedOperationException(不支援的操作)異常。

  示例如下

List<String> list = new ArrayList<>();
list.add("x");
Collection<String> clist = Collections.unmodifiableCollection(list);
clist.add("y");
System.out.println(list.size());
View Code