Django的Xadmin後臺整合富文字Ueditor
1.Java容器有哪些?
Collection:
List:
- ArrayList
- LinkkedList
- Vector
- Stack
Set:
- HashMap
- LinkedHashSet
- TreeSet
Map:
- HashMap
- LinkedHashMap
- TreeMap
- ConcurrentHashMap
- Hashtable
2.Collection和Collections是有什麼區別?
Collection
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