Properties 属性列表中的每个键及其对应的值都是一个字符串。 Properties可以保存到流中或从流中加载。 作为配置文件使用: 1.在项目下定义一个文件xx.properties ->键值对的数据,默认都是字符串 通过Properties实现软编码 Properties作为配置文件特点: 可以存储简单的键值对数据,操作也简单

Properties pro = new Properties();

 

Collections 操作集合的工具类 void sort(List) //对List容器内的元素排序,排序的规则是按照升序进行排序。 void shuffle(List) //对List容器内的元素进行随机排列 void reverse(List) //对List容器内的元素进行逆续排列 void fill(List, Object) //用一个特定的对象重写整个List容器 int binarySearch(List, Object)//对于顺序的List容器,采用折半查找的方法查找特定对象 如何处理HashMap的线程安全问题: 1.Hashtable 2.使用Collections工具类的synchronizedMap(Map<K,V> m) 返回由指定映射支持的同步(线程安全)映射 3.juc包下的ConcurrentHashMap使用线程安全的哈希表 ->推荐使用

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

public class CollectionsDemo02 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();

        list.add(5);
        list.add(1);
        list.add(2);
        list.add(4);
        list.add(3);

        System.out.println(list);

        // void shuffle(List) //对List容器内的元素进行随机排列
        Collections.shuffle(list);
        System.out.println(list);

        //翻转
        Collections.reverse(list);
        System.out.println(list);

        //升序
        Collections.sort(list);
        System.out.println(list);

        //二分法搜索
        System.out.println(Collections.binarySearch(list,9));

        //fill填充
        Collections.fill(list,null);
        System.out.println(list);

        //线程安全
        ConcurrentHashMap<String,Boolean> c = new ConcurrentHashMap();

        c.put("张三",false);
        c.put("李四",true);

        System.out.println(c.get("张三"));

    }
}

 

四大内置函数式接口 消费型: Consumer<T> void accept(T t) 有来无回 供给型: Supplier<T> T get() 提供 函数型: Function<T,R> R apply(T t) 段言型: Predicate<T> boolean test(T t) 想要调用方法使用时,行为作为参数, 行为不确定(lambda),定义方法时就需要使用函数型接口作为形参类型-> 可以选择性 的使用内置函数型接口 如果实参不使用lambda,形参可以为任意类型

方法引用: 简化Lambda表达式,是Lambda表达式的另一种表现形式 ()->{} 当lambda体{}的实现,已经存在其他功能实现过了,可以在lambda体重直接调用那个方法来实现 这种情况就可以通过方法引用来简化这个lambda表达式的结构==> 通过方法引用来引用|调用已经写好方法来实现 语法: 方法引用 对象::成员方法 => ()->{对象.成员方法名 ();} 类名:: 静态方法名 类名::成员方法 构造器引用 类名::new 注意: 当内部所引用的方法的参数列表与返回值与lambda重写的抽象方法的参数列表与返回值一一对应,这时候就可以使用方法引用 当lambda参数列表只有一个参数,这个参数匹配lambda体{}重所调用的成员方法的对象存在--> 类名::成员方法名 当lambda参数列表有多个参数,第一个参数匹配lambda体{}中所调用的成员方法的对象存在,第二参数开始匹配lambda体{}中所调用的成员方法的参数列表--> 类名::成员方法名

多线程: 多任务执行,多条路径执行 如果没有多任务执行需求,就不需要多线程 多线程的优点: 资源利用率更好 效率更高 多线程的缺点: 程序设计复杂 需要考虑可能会出现的数据不安全情况 线程和进程: 进程:每个进程都有独立的代码和数据空间(进程上下文) 进程间的切换会有较大的开销 一个进程包含1~n个线程 资源分配的最小单位 线程: 线程之间开销小 多个|一类线程共享进程的代码和数据空间 每个线程有独立运行栈和程序计数器(PC) 轻量级的进程 cpu调度执行的最小单位 并发和并行: 并行一定是并发,而并发不一定是并行,也可能是串行 并发: 一个时间段内,程序拥有处理多任务的能力 并行: 一个时间段内,程序拥有同时处理多任务的能力 多线程目标: 创建与开启 *** 线程状态 线程安全 *** 线程通信 线程的创建方式: 1.继承Thread类,重写run()方法,方法内定义线程体 + start() 2.实现Runnable接口 ,重写run()方法,方法内定义线程体 + start() -->推荐 3.Callable接口,重写call方法,方法中定义线程体-->了解

public class ThreadDemo06 extends Thread {
    /*
        定义线程体
     */
    @Override
    public void run() {
        for(int i = 1;i<=20;i++){
            System.out.println("一边敲代码..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        //创建一个线程
        ThreadDemo06 th = new ThreadDemo06();
        //开启线程
        //th.run();  方法的调用
        th.start();  //开启线程 jvm调用run()方法

        //默认主线程
        for(int i = 1;i<=20;i++){
            System.out.println("陪女朋友聊天..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

 

创建线程的第二种方式 实现Runnable,重写run()方法 接口是多实现,类是单继承 实现资源共享

public class ThreadDemo07 implements Runnable{

    @Override
    public void run() {
        for(int i = 1;i<=20;i++){
            System.out.println("一边打游戏..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        //创建线程
        ThreadDemo07 th = new ThreadDemo07();
        Thread t = new Thread(th);

        //开启线程
        t.start();

        for(int i = 1;i<=20;i++){
            System.out.println("一边陪女朋友..");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }


    }
}