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