1. 程式人生 > >好程式設計師大資料學習路線分享Map學習筆記

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

​ 好程式設計師大資料學習路線分享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;

}