无声specialweek

从零开始学Java-Day16

红黑树

  1. 节点是红色或黑色。
  2. 根节点是黑色。
  3. 每个叶子节点都是黑色的空节点(NIL节点)。
  4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

Map接口--键值对【Entry<k,v>】的方式存数据

Map的迭代

image-20210622104619377

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());
        }
    }
}

posted on 2021-06-23 19:47  无声specialweek  阅读(34)  评论(0编辑  收藏  举报

导航