java 程式設計常混淆的一些屬性,方法,工具類

dataijidexiaozi發表於2019-09-24

平時寫程式碼常常會混淆一些東西,在這裡寫這篇部落格,是希望將容易混淆但經常用到的方法、屬性、工具類總結出來,並將大牛的部落格整理貼出來以供大家參考。希望自己能不斷新增新的,一直更新下去吧。

1. length、length()、size()區別

  • length不是方法,是屬性,陣列的屬性
  • length()是字串String的一個方法
  • size()方法,是List集合的一個方法

詳細參考CSDN博主「張小煩一點都不煩」的原創文章:傳送門

2. 判斷陣列/集合為空的工具類

  • 判斷集合是否為空:collection == null || collection.isEmpty();

  • 判斷Map是否為空:map == null || map.isEmpty();

  • 判斷陣列是否為空:array == null || array.length == 0;

  • 判斷List是否為空 :list == null || list.size() == 0;

詳細參考部落格園博主ONEDIR的原創文章:傳送門

3. java Queue中 remove/poll, add/offer, element/peek區別

offer,add區別:

  1. add方法向佇列中新增元素,返回布林值,add方法新增失敗時會拋異常,不推薦使用
  2. offer方法向佇列中新增元素,返回布林值

poll,remove區別:

  1. remove方法移除首個元素並返回,若佇列為空,會丟擲異常:NoSuchElementException,不推薦使用

  2. poll方法移除佇列首個元素並返回,若佇列為空,返回null

peek,element區別:

  1. peek方法返回佇列首個元素,但不移除,若佇列為空,返回null
  2. element方法返回佇列的頭元素,但不移除,若佇列為空,會丟擲異常:NoSuchElementException,不推薦使用

詳細參考部落格園博主「迷失之路」的原創文章:傳送門

Arraylist和Linkedlist的區別
  1. Arraylist:底層是基於動態陣列,根據下表隨機訪問陣列元素的效率高,向陣列尾部新增元素的效率高;但是,刪除陣列中的資料以及向陣列中間新增資料效率低,因為需要移動陣列。例如最壞的情況是刪除第一個陣列元素,則需要將第2至第n個陣列元素各向前移動一位。而之所以稱為動態陣列,是因為Arraylist在陣列元素超過其容量大,Arraylist可以進行擴容(針對JDK1.8
    陣列擴容後的容量是擴容前的1.5倍),Arraylist原始碼中最大的陣列容量是Integer.MAX_VALUE-8,對於空出的8位,目前解釋是
    :①儲存Headerwords;②避免一些機器記憶體溢位,減少出錯機率,所以少分配③最大還是能支援到Integer.MAX_VALUE(當Integer.MAX_VALUE-8依舊無法滿足需求時)
  2. Linkedlist基於連結串列的動態陣列,資料新增刪除效率高,只需要改變指標指向即可,但是訪問資料的平均效率低,需要對連結串列進行遍歷。
  3. 對於隨機訪問get和set,ArrayList優於LinkedList,因為LinkedList要移動指標。
    對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。

詳細參考CSDN博主「QQ是一枚程式媛」的原創文章:傳送門

  • Java 定義長度為 0 的陣列 / 空陣列
    int[] array = new array[0]; // 定義一個長度為 0 的陣列 / 空陣列
    長度為 0 的陣列 / 空陣列 並不是 null

詳細參考CSDN博主「QQ是一枚程式媛」的原創文章:傳送門

Java list的用法
  • list中新增,獲取,刪除元素;
    新增方法是:.add(e);  
    獲取方法是:.get(index);  
    刪除方法是:
    按照索引刪除;.remove(index);
    按照元素內容刪除;.remove(Object o);
  • list中是否包含某個元素; 方法:.contains(Object o); 返回true或者false
  • list中根據索引將元素數值改變(替換);
    .set(index, element) 對指定的index的元素進行替換
    .add(index, element)對指定的index新增,原來的往後移
  • list中檢視(判斷)元素的索引;
    方法:
    .indexOf() 檢視元素索引,若存在多個相同元素,返回第一個元素索引
    .lastIndexOf()有多個相同元素,返回相同元素中最後一個元素的索引
  • 根據元素索引位置進行的判斷;
    object.indexOf() ==0
  • 利用list中索引位置重新生成一個新的list(擷取集合);
    方法: .subList(fromIndex, toIndex);注意:不包括toIndex  .size() ; 該方法得到list中的元素數的和
  • 對比兩個list中的所有元素;
    兩個相等物件的equals方法一定為true, 但兩個hashcode相等的物件不一定是相等的物件
  • 判斷list是否為空;
    方法: .isEmpty() 空則返回true,非空則返回false
  • 返回Iterator集合物件;
    .iterator()
  • 將集合轉換為字串;
    .toString()
  • 將集合轉換為陣列;
    .toArray()
    12 集合型別轉換;
    13 去重複;
    詳細參考CSDN博主「Barcon」的原創文章:傳送門
判斷List是否為空的問題

兩種方法來進行判斷都是可以判斷的list集合為空問題

if(list != null && list.isEmpty())

else{ 做其他處理}



if(list != null && list.size()!=0)

else{ 做其他處理}
【Java面試題】Double和double 區別
  • Double是java定義的類,而double是預定義資料型別(8種中的一種)

  • Double就好比是對double型別的封裝,內建很多方法可以實現String到double的轉換,以及獲取各種double型別的屬性值(MAX_VALUE、SIZE等等)

  • 基於上述兩點,如果你在普通的定義一個浮點型別的資料,兩者都可以,但是Double是類所以其物件是可以為NULL的,而double定義的不能為NULL,如果你要將一些數字字串,那麼就應該使用Double型別了,其內部幫你實現了強轉。

相關文章