java面試題基礎之集合篇
1、ArrayList和Vector的區別
參考:https://www.cnblogs.com/javaisbest/p/11795444.html
2、HashMap和Hashtable的區別
二者都是Map的實現類,且底層都是哈希表,他們的區別有以下幾點:
父類不同:
HashMap的父類是AbstractMap,HashTable的父類是Dictionary
初始化容量和擴容量不同:
HashMap初始化容量為16,按2倍擴容;HashTanle初始化容量為11,按2倍+1擴容
鍵和值是否可以為null:
HashMap可以,HashTable不行
線程安全上:
HashMap不是線程安全的,HashTable是線程安全的
3、List和 Map區別?
List集合是Connection集合的子接口
存取數據的方式不同:
List集合是單個存取,且存值是有序可重復的;而Map集合是根據鍵值對進行存取,鍵是無序不可重復的,值可以重復
4、List,Set, Map是否繼承自Collection接口?
在java中的集合有兩大接口:Map和Connection,其它所有集合都是他們的實現類
所以,List集合和Set集合繼承了Connection接口的,而Map集合不是
5、List、Map、Set三個接口,存取元素時,各有什么特點?
存元素:
List:單個存取,且元素的值有序可重復
Map:鍵值對存取,鍵是無序不可重復的,值可以重復
Set:單個存取,元素的值無序不可重復
取元素:
List取出元素for循環,foreach循環,Iterator迭代器迭代
Map取出元素需轉換為Set,然后進行Iterator迭代器迭代,或轉換為Entry對象進行Iterator迭代器迭代
Set取出元素foreach循環,Iterator迭代器迭代
6、說出ArrayList,Vector,LinkedList的存儲性能和特性
ArrayList和Vector底層是數組,用數組方式存儲數據,這種方式查詢速度快,修改、刪除操作慢。
LinkedList底層是雙向鏈表,將對象存放在獨立的空間中,這種方式修改數據快,查詢數據慢。
7、去掉一個Vector集合中重復的元素
運用Set集合的不可重復性
8、Collection和Collections的區別。
Collection是集合類的一個接口,其中包含了對集合類功能的實現和一些基本操作,有子接口List和Set
Collections是一個類,是針對集合操作的工具類,其中包含對集合進行排序和二分查找的方法
9、Set里的元素是不能重復的,那么用什么方法來區分重復與否呢?是用==還是equals()?它們有何區別?
從定義上來看:
equals是一個方法,==是一個關系運算符
當比較對象為基本數據類型時:
只能用==
當比較對象為引用數據類型時
==:比較的是兩個引用是不是指向同一個內存地址
equals:比較的是兩個引用的字面值是不是相同,什么叫字面值?你能看到的值就是字面值,比如:String s="abc"; abc就是字面值.
由於Set集合中存放的是對象的引用,而需要比較的是引用的值是否相同,所以說用equals
10、你所知道的集合類都有哪些?主要方法?
java中的集合類有兩大接口:Connection集合、Map集合
Connection集合的兩大實現類:List集合、Set集合
List集合的實現類:ArrayList、Vector、LinkedList
Set集合的實現類:HashSet、TreeSet
Map集合的實現類:HashMap、HashTable、TreeMap
Connection集合的主要方法:
add():向集合中添加元素
isEmpty():集合是否為空
size():判斷集合中元素個數
contains(元素名稱):判斷該元素是否存在
remove(元素名稱):刪除該元素
toArray(數組名):將集合轉為數組
Set集合由於實現了Connection接口,參考Connection
相對於Collection,List增加了索引值的操作(索引值從0開始):
add(索引值,添加的內容):指定的索引值處添加數據
indexOf(查找的內容)/lastIndexOf(查找的內容):返回元素第一次/最后一次出現的位置的索引值:
get(索引值):返回指定位置的元素
ArrayList、Vector實現了List接口,參考List
但LinkedList由於是雙鏈表,比較特殊:
模擬棧(先進后出):進棧和出棧:push()、pop()
模擬隊列(先進先出):進隊和出隊:offer()、poll()
Map集合常用方法:
put():添加元素
replace():替換
remove(鍵)/remove(鍵,值):刪除(前者:只要“鍵”匹配,則會直接刪除鍵值對;后者:需要“鍵”、“值”都匹配才會刪除鍵值對)
size():判斷集合的個數
get(鍵):查詢;根據“鍵”查詢“值”,如果“鍵”不存在,則輸出null;
containsKey(鍵)/containsValue(值):查詢鍵/值是否存在
keySet():返回所有鍵的集合
變量.Values():返回所有值得集合
entrySet():返回所有Entry的集合