從零開始學Java-Day16
阿新 • • 發佈:2021-06-23
紅黑樹
- 節點是紅色或黑色。
- 根節點是黑色。
- 每個葉子節點都是黑色的空節點(NIL節點)。
- 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
- 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
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; } }
- 新建狀態(New) : 當執行緒物件建立後就進入了新建狀態.如:Thread t = new MyThread();
- 就緒狀態(Runnable):當呼叫執行緒物件的start()方法,執行緒即為進入就緒狀態.處於就緒(可執行)狀態的執行緒,只是說明執行緒已經做好準備,隨時等待CPU排程執行,並不是執行了t.start()此執行緒立即就會執行
- 執行狀態(Running):當CPU排程了處於就緒狀態的執行緒時,此執行緒才是真正的執行,即進入到執行狀態就緒狀態是進入執行狀態的唯一入口,也就是執行緒想要進入執行狀態狀態執行,先得處於就緒狀態
- 阻塞狀態(Blocked):處於運狀態中的執行緒由於某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀態,直到其進入就緒狀態才有機會被CPU選中再次執行.
根據阻塞狀態產生的原因不同,阻塞狀態又可以細分成三種:
等待阻塞:執行狀態中的執行緒執行wait()方法,本執行緒進入到等待阻塞狀態同步阻塞:執行緒在獲取synchronized同步鎖失敗(因為鎖被其他執行緒佔用),它會進入同步阻塞狀態其他阻塞:呼叫執行緒的sleep()或者join()或發出了I/O請求時,執行緒會進入到阻塞狀態.當sleep()狀態超時.join()等待執行緒終止或者超時或者I/O處理完畢時執行緒重新轉入就緒狀態 - 死亡狀態(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());
}
}
}