从零开始学Java-Day16
Posted 无声specialweek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始学Java-Day16相关的知识,希望对你有一定的参考价值。
红黑树
- 节点是红色或黑色。
- 根节点是黑色。
- 每个叶子节点都是黑色的空节点(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());
}
}
}
以上是关于从零开始学Java-Day16的主要内容,如果未能解决你的问题,请参考以下文章
自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新