好程式設計師大資料學習路線分享Map學習筆記

好程式設計師IT發表於2019-09-28

好程式設計師大資料學習路線分享Map學習筆記,set 底層是預設 value map

Map 的常用方法

// 介紹 Map 介面的方法

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

//1. 增加

//V put(K key,V value)   增加一個鍵值對

// 關於返回值 , 如果當前的 key 之前沒有新增過 , 返回 null. 如果當前的 key 之前已經存在了 , 這裡返回之前的值

//void putAll(Map<? extends K,? extends V> map)   增加多個

//2. 刪除

//V remove(Object key)   根據 key 刪除元素

// 返回值就是被刪掉的值

//void clear()   刪除全部   != null

//3. 獲取

//V get(Object key)   根據 key 查詢元素

//int size()   獲取鍵值對的個數

//Set<K> keySet()    遍歷方法一

//Set<Map.Entry<K,V>> entrySet()  遍歷方法二

//4. 常用的判斷

//boolean isEmpty()  // map!=null

//boolean containsKey(K key)  是否包含當前的 key

//boolean containsValue(V value)  是否包含當前的 value

 

##  一、 HashMap

底層是雜湊表,執行緒不安全

** 雜湊表結構 **

![yuanli](G:\bigdata\week2\7-31\ 資料 \hash \Hash .assets\yuanli.png)

 

### 2.HashMap HashTable 區別

1.HashTable 是執行緒安全的

2.HashTable key 不能為空

 

##  二、 TreeMap

底層是二叉樹,執行緒不安全

/*

 * TreeMap 的注意點 :

 * 1. 什麼型別的資料型別可以作為 key?

 * a: 實現了 Comparable 介面的 compareTo() 方法    b: 實現了 Comparator 介面的 compare() 方法

 *  可以的代表 :String, 包裝類 , 自定義的實現了要求的類

 *  不可以的代表 : 陣列 ,ArrayList,LinkedList( 如果給他們建立的比較器也可以比較 , 但是不建議使用 )

 *

 * 2. 元素可不可以作為 key, 跟元素內部的成員有沒有關係

 *  元素可不可以作為 key, 跟元素內部的成員有沒有關係

 */

public class Demo5 {

public static void main(String[] args) {

TreeMap<Dog, String> map = new TreeMap<>();

// 如果沒有重寫 compareTo 或者 compare 方法 ,put 內部無法呼叫元素的這兩個方法 . 所以會報錯

map.put(new Dog(), "haha");

}

}

 

class Dog implements Comparable<Dog>{

//2. 元素可不可以作為 key, 跟元素內部的成員有沒有關係

Object object;

@Override

public int compareTo(Dog o) {

// TODO Auto-generated method stub

return 0;

}

 

}

 

```

可變引數

```

public static void main(String[] args) {

sum(2, 3);// 值傳遞

// 址傳遞

int[] arr = {3,4,5};

sum(arr);

// 可變引數

 

// 可變引數的特點

//1. 給可變引數傳值的實參可以直接寫 , 個數不限制 , 內部會自動的將他們放入可變陣列中 .

sum1(5,6,7,8,9,3,3,4);

//2. 當包括可變引數在內有多個引數時 , 可變引數必須放在最後面 , 並且一個方法中最多隻能有一個可變引數

sum2(6,3);

//3. 當可變引數的方法與固定引數的方法是過載關係時 , 呼叫的順序 , 固定引數的優先於可變引數的 .

sum3(2,3);

}

 

// 求兩個數的和

// 值傳遞

public static int sum(int a,int b) {

return a+b;

}

// 址傳遞

public static int sum(int[] a) {

int sum = 0;

for (int i = 0; i < a.length; i++) {

sum+=a[i];

}

return sum;

}

// 透過可變引數

// 構成 : 資料型別 +...     實際上就是資料型別 []   :int[]

public static int sum1(int... a) {

int sum = 0;

for (int i = 0; i < a.length; i++) {

sum+=a[i];

}

return sum;

}

//2. 當包括可變引數在內有多個引數時 , 可變引數必須放在最後面 , 並且一個方法中最多隻能有一個可變引數

public static void sum2(float b,int... a) {

int sum = 0;

for (int i = 0; i < a.length; i++) {

sum+=a[i];

}

System.out.println(sum);

}

//3. 當可變引數的方法與固定引數的方法是過載關係時 , 呼叫的順序 , 固定引數的優先於可變引數的 .

public static int sum3(int a, int b) {

System.out.println("a");

int sum = 0;

return sum;

}

public static int sum3(int... a) {

System.out.println("b");

int sum = 0;

return sum;

}

```

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2658607/,如需轉載,請註明出處,否則將追究法律責任。

相關文章