1. 程式人生 > 其它 >從零開始學Java-Day16

從零開始學Java-Day16

紅黑樹

  1. 節點是紅色或黑色。
  2. 根節點是黑色。
  3. 每個葉子節點都是黑色的空節點(NIL節點)。
  4. 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
  5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

Map介面--鍵值對【Entry<k,v>】的方式存資料

Map的迭代

package cn.tedu.map;

import java.util.*;

//本類用測試map的迭代
public class TestMap2 {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1,"超級小海灣");
        map.put(2,"小慄帽");
        map.put(3,"玉藻十字");
        map.put(4,"成田白仁");
        System.out.println(map);
        /*
        map本身沒有迭代器,所以需要轉換成其他集合進行迭代
        方案一:set<key> keySet()
        方案二:srt<Entry<k,v>> entrySet()
         */
        Set<Integer> setKey = map.keySet();
        System.out.println(setKey);
        Iterator<Integer> it = setKey.iterator();
        while (it.hasNext()){
            Integer i = it.next();
            System.out.print(i + ":" + map.get(i) + " ");
        }
        System.out.println();
        System.out.println("=================");
        Set<Map.Entry<Integer,String>> entries = map.entrySet();
        Iterator<Map.Entry<Integer,String>> it2 = entries.iterator();
        while (it2.hasNext()){
            Map.Entry<Integer,String> m = it2.next();
            System.out.print(m.getKey() + ": " + m.getValue() + " ");
        }
    }
}
package cn.tedu.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

//本類用於完成集合相關的練習
public class TestMap3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入一串字元");
        String str = scanner.next();
        System.out.println(count(str));
        scanner.close();
    }

    public static Map<Character,Integer> count(String str){

        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            map.merge(c, 1, Integer::sum);
        }
        return map;
    }
}
  1. 新建狀態(New) : 當執行緒物件建立後就進入了新建狀態.如:Thread t = new MyThread();
  2. 就緒狀態(Runnable):當呼叫執行緒物件的start()方法,執行緒即為進入就緒狀態.處於就緒(可執行)狀態的執行緒,只是說明執行緒已經做好準備,隨時等待CPU排程執行,並不是執行了t.start()此執行緒立即就會執行
  3. 執行狀態(Running):當CPU排程了處於就緒狀態的執行緒時,此執行緒才是真正的執行,即進入到執行狀態就緒狀態是進入執行狀態的唯一入口,也就是執行緒想要進入執行狀態狀態執行,先得處於就緒狀態
  4. 阻塞狀態(Blocked):處於運狀態中的執行緒由於某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀態,直到其進入就緒狀態才有機會被CPU選中再次執行.
    根據阻塞狀態產生的原因不同,阻塞狀態又可以細分成三種:
    等待阻塞:執行狀態中的執行緒執行wait()方法,本執行緒進入到等待阻塞狀態同步阻塞:執行緒在獲取synchronized同步鎖失敗(因為鎖被其他執行緒佔用),它會進入同步阻塞狀態其他阻塞:呼叫執行緒的sleep()或者join()或發出了I/O請求時,執行緒會進入到阻塞狀態.當sleep()狀態超時.join()等待執行緒終止或者超時或者I/O處理完畢時執行緒重新轉入就緒狀態
  5. 死亡狀態(Dead):執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期
package cn.tedu.thread;
//本類用於執行緒的測試
public class TestThread {
    public static void main(String[] args) {
        primeThread p = new primeThread(143);
        p.setName("特別周");
        p.start();
        System.out.println(primeThread.activeCount());
        System.out.println(p.getId());
        System.out.println(p.getPriority());
        System.out.println(p.isAlive());
        System.out.println(p.isDaemon());
        System.out.println(p.isInterrupted());
        p.setPriority(4);
        System.out.println(p.getPriority());
        System.out.println("==================");
        Thread t = new Thread();
        t.start();
    }
}

class primeThread extends Thread{
    long minPrime;
    primeThread(long minPrime) {
        this.minPrime = minPrime;
    }

    @Override
    public void run() {
        for (int i = 0; i < 3; i++){
            System.out.println(i + "." + getName());
        }
    }
}