初識Java集合類,字節跳動面試分享

程序員ioms 2021-09-20 03:03:07 阅读数:500

java 集合 分享

[](

)前言

=====================================================================

本文為初識Java的集合類,偏入門,希望能與大家一起學習。

[](

)一、集合框架是什麼?

=============================================================================

Java的集合框架Java Collection Framework,又被稱為容器container,是定義在Java.util包下的一組接口interfaces和其實現類class,主要錶現為將多個元素置於一個單元中,對這些元素進行存儲、檢索、管理,即平時我們俗稱的增删改查。

類和接口總覽

初識Java集合類,字節跳動面試分享_程序員

Map接口說明


Map<String,String> map =new HashMap<>();

  • 1.
  • 2.
  • 3.

Map 常用方法 map.get(k) 通過指定的K去查找對應的V的值

map.getOrDefault(k,v(defaultvalue)) 通過k去查找對應的v的值,沒有找到用給定的默認值替換;

map.put(k,y) 存放元素 ;


//獲取每一個key 和value
Set< Map.Entry<String,String>> set =map.entrySet();
for (Map.Entry<String,String>set2:set) {//分別獲取每一個key和Value
String k1=set2.getKey();
String v1=set2.getValue();
System.out.println(k1+"->"+v1);
}

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

[](

)二、泛型

=======================================================================

之前我們的map方法只能存放特定的數據類型,現在我們需要其他數據類型,又不想强制類型准轉換,我們就利用泛型來實現這些不同類型的


class MyArrayList<T>{//創建一個T類型的順序錶 T類型可以是任意類型的 使用時定義
public T[]elem;
public int usedSize;
public MyArrayList(){
this.elem=(T[]) new Object[10];
}
public void add(T val){
this.elem[this.usedSize]=val;
this.usedSize++;
}
}
public static void main(String[] args) {
MyArrayList<String> myArrayList1=new MyArrayList<>();
myArrayList1.add("hello");
myArrayList1.add("+");
myArrayList1.add("world");
//問題 1.不能new泛型類對象 eg: new T[10];錯誤
//2.基本類型不能做為泛型類型參數
MyArrayList<Integer> myArrayList2=new MyArrayList<>();
myArrayList2.add(1);
myArrayList2.add(2);
myArrayList2.add(3);
//好處1.可以自定義類型,
//2.存放元素時,會自動進行類型轉換; 獲取元素時不再需要强制類型轉換,

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.

泛型是怎麼編譯的:泛型是一種作用於編譯期間的機制,運行期間沒有泛型的概念(擦除機制,不是替換)。

[](

)三、包裝類

========================================================================

只有int 和char類型的包裝類是特殊的,其餘的包裝類都是大寫首字母;int的包裝類是Integer char的包裝類是Character。

包裝類的使用(裝箱就是把簡單類型變為包裝類型)


//自動裝箱
Integer i=10; // int j=10; Integer i=j;
//.手動裝箱
int i=10;
Integer b=Integer.valueOf(i);
//自動拆箱
Integer i=128;
int b=i;
//手動拆箱
Integer a=129;
int b=a.intValue();

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

問題:


Integer a=100;
Integer b=100;
System.out.println(a==b);

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

這時候打印值應該是true

但是Integer a=200; Integer b=200; System.out.println(a==b);

打印值卻是false ,這是因為該過程發生了裝箱操作,調用了valueOf方法,查看源碼

初識Java集合類,字節跳動面試分享_後端_02如果i是>=-128或者<=127 返回的是i+(-low) ,如果不在範圍中就會new一個新對象,其地址值不相同,所以打印false。

[](

)四、List接口

===========================================================================

list接口可以實現下面這幾種類


List<Integer> list1=new ArrayList<>();
List<Integer> list2=new LinkedList<>();
List<Integer> list3=new Stack<>();

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

構造時默認大小都為0,等到加入第一個元素後,大小變為10,如果滿了,擴容時按照1.5倍擴容

擴容源碼

初識Java集合類,字節跳動面試分享_後端_03

常見方法實現

最後

文章中涉及到的知識點我都已經整理成了資料,錄制了視頻供大家下載學習,誠意滿滿,希望可以幫助在這個行業發展的朋友,在論壇博客等地方少花些時間找資料,把有限的時間,真正花在學習上,所以我把這些資料,分享出來。相信對於已經工作和遇到技術瓶頸的朋友們,在這份資料中一定都有你需要的內容。

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

版权声明:本文为[程序員ioms]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210920030307404H.html