1、jdk和jre有什麼區別?
jdk java開發工具
jre java運行環境
jdk包含jre、java編譯工具javac及java程序調試及分析工具。
2、==和equals()區別
==是引用比較
equals是值比較
3、兩個對象hashcode值相同,equals()不一定爲true
4、final在java中有什麼作用?
類:不能繼承
方法:不能修改
變量:不能修改,常量
5、java中Math(-1.5)等於多少?
-1 向右取整
6、java基礎類型:byte、boolean、char、short、int、float、long、double String屬於對象
7、java中操作字符串有哪些類?
String 聲明對象不可變
StringBuffer 對象可變,線程安全,效率低
StringBuilder 對象可變,非線程安全,效率高
8、String str=“i”和String str=new String(i)不一樣
一個是常量,分配到常量池中
一個是對象,分配到堆內存中
9 、java字符串翻轉reverse()
10、String 類常見方法
charAt()
toUpperCase()
toLowerCase()
11、抽象類不一定有抽象方法,抽象類不能實例對象
12、普通類不能含抽象方法,抽象類可含抽象方法
抽象類不能實例化,普通類可以實例化
13、抽象類不能用final修飾,抽象類就是被用來繼承的
14、接口和抽象類
關鍵字 :extends implement
抽象類有構造函數,接口沒有
類可以有多個接口,但只能繼承一個抽象類
接口默認public修飾,抽象類都可以
15、java中IO流
功能:輸入、輸出
大小:字節流(8字節)、字符流(16字節)
16、BIO、NIO、AIO
BIO:同步阻塞式IO,簡單使用方便,併發處理能力低
NIO:同步非阻塞IO,客戶端服務端通過channel通訊,多路複用
AIO:異步非阻塞IO,異步IO操作基於事件和回調機制
17、Files常見方法
18、java容器:Collection和map
Collection包括list和set
List:ArrayList/LinkedList/Vector/Stack
Set:HashSet/LinkedHashSet/TreeSet
Map包括
HashMap:LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable
19、Collection和Collections區別
Collection是一個集合接口,提供通用接口方法,所有集合都是它的子類,比如List、set
Collections是一個包裝類,包含了很多靜態方法,不能被實例化,比如Collections.sort(list)
20、List:元素有序、允許元素重複
Set:元素有序,不允許元素重複
Map:key唯一,value可重複
AbstractMap、HashMap元素無序,TreeMap、TreeSet元素有序(二叉樹排序)
21、hashmap 中key和value爲空,hashtable不允許key和value爲空
hashtable線程安全,hashmap非線程安全
hashtable是保留類不建議使用,hashmap單線程使用,concurrenthashmap多線程
22、如何決定使用hashmap還是treemap
hashmap插入更快
treemap有序遍歷
23、hashmap實現原理
hashmap是基於hash算法實現的,通過put(key,value)存儲,get(key)來獲取。當傳入key時,hashmap會根據key.hashCode()計算出hash值,根據hash值將value保存到bucket裏。當計算出的hash值相同時,我們稱之爲hash衝突,hashmap做法是用鏈表和紅黑樹存儲相同hash值得value,衝突少使用鏈表否則用紅黑樹。
24、hashset
基於hashmap實現,不允許值重複
25、ArrayList基於動態數組實現,頻繁讀取
LinkedList基於鏈表,插入和刪除
26 數組和鏈表轉換
Array.asList(array)
List自帶toArray()方法
27、ArrayList和Vector
Vector使用Synchronized來實現線程同步,是線程安全的,而ArrayList是非線程安全的
ArrayList在性能方面優於Vector
擴容:Vector增加1倍,ArrayList只會增加50%
28、Array和ArrayList有何區別?
Array可以存儲基本數據類型和對象,ArrayList只能存儲對象
Array是固定大小的,ArrayList大小自動擴展的
Array內置方法沒有ArrayList多,比如addAll、removeAll、iteration等方法只有ArrayList。
29、在Queue中poll()和remove()有什麼區別?
相同點:都是返回第一個元素,並在隊列中刪除返回的對象
不同點:如果沒有元素poll()會返回null,而remove()會直接拋出nosuchElementException()異常
30、哪些集合類是線程安全的?
Vector、Hashtable、Stack都是線程安全的,而HashMap則是非線程安全的
31、迭代器Iterator時什麼?
Iterator接口提供遍歷任何Collection的接口,我們可以從一個Collection中使用迭代器方法來獲取迭代器實例。迭代器取代了Java集合框架中的Enumeration,迭代器允許調用者在迭代過程中一出元素。
32、Iterator怎麼使用?
List<String> list=new ArrayList<>();
Iterator<String> it = list.iterator();
while(it.hasNext())
{
String obj=it.next();
System.out.println(obj);
}
特點:更安全,可確保在當前遍歷的集合元素被更改的時候,會拋出異常
33、Iterator和Listlterator有什麼區別?
Iterator可遍歷set和list集合,單向遍歷
而listIteration只能遍歷list,可雙向遍歷,從Iteration接口繼承,添加了一些額外功能
34、怎麼確保一個集合不被修改
可以使用 Collections. unmodifiableCollection(Collection c) 方法來創建一個只讀集合,修改時會剖出異常