A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

day03
迭代器iterator
格式
Iterator<类型> xxx=修改对象.iterator(不是new出来的)
while(xxx.hashNext()){
sout(xxx.next)
}



List
list集合:有序,有索引,可以存取重复元素
list.add(索引,xxx) 添加到指定索引上
list.get(inde),返回索引上的值
list.remove(inde) 返回被删除的值
list.set(index,xxx) 替换索引的值,返回的是被替换的值
ArrayList集合特点:底层是数组,查询慢,增删快 线程不安全, 效率高。

Set
set集合:没有顺序没有索引,不存储重复元素。
HashSet集合:底层是红黑树或数组+链表。没有顺序没有索引,不存储重复元素。
JavaBean里面添加hashCode() equals可以判断Hashset中自定义(person,student)类的元素是否一样。

数据结构特点
栈:stack,又称堆栈,对元素的存取特点是:先进后出

队列:queue,简称队,对元素的存取特点是:先进先出
数组:Array,是有序的元素序列,对元素的存取特点是:
查找元素快: 查询快: 通过 (第一个元素地址值 + 索引) 可以快速计算出该索引元素的地址值
增删元素慢
增删慢: 增加一个元素, 要创建长度+1的新数组, 然后将原数组元素复制到新数组, 然后存入新元素; 删除类似
LinkedList特有的方法:
(1)基本方法:add, set, get, remove, clear, size等方法;
(2)特有方法:addFirst(push,), addLast, getFirst, getLast, removeFirst( pop), removeLast,  clear等方法。

链表:linked list,对元素的存取有如下的特点:
查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
增删元素快:
增加元素:只需要修改连接下个元素的地址即可。
删除元素:只需要修改连接下个元素的地址即可。

红黑树
查找: 节点存储的元素是按照大小顺序存储的
        特点:
                元素存储过程中就完成了大小排序
                查询比链表快, 增删比数组快 (数组和链表的折中)

红黑树的适用场景:
        查询和增删都有, 需要元素自动排序的场景


day04  Map集合
Map集合的遍历增强for,先用entrySet(进入),再用entry.key和entry.value  分别输出键和值。
HashMap   key存取无序,可添加null
LinkedHashMap   key存取有序  不可加null
boolean containsKey(Object key): 判断是否包含指定的键
Map.put  可修改(同key)可添加
map.remove (键,值),删除元素
Map.keySet 通过键找值

Collections工具类
sort(List<T> list): 默认按照"升序"将元素排序
数字, 字母, 都可以按照升序排序
o1-o2: 升序(从小到大)    o2-o1: 降序(从大到小)
shuffle 打乱,用Collections调用,
sort   排序 ,用Collections调用


1装牌,HashMap<Integer,String>集合,键是索引,值是 什么牌

2.创建一个相同索引的数组
Arraylist<Interger> list=new Arraylist;
创建了四个对象 Arraylist<Interger> person1=new Arraylist;
3.洗数组排序,然后i>=51{  
dipai.add(list.get(i))
                                                  }
把这个相同索引的数组分给了四个对象。


两种方法遍历map         
请使用Map集合存储自定义数据类型Car做键,对应的价格做值。并使用keySet和entrySet两种方式遍历Map集合。
  Map<Car,Integer> map=new HashMap<>();
        map.put(new Car("凯迪拉克","黄色"),50000);
        map.put(new Car("宝马","黑色"),50000);
        Set<Car> cars = map.keySet();
        //for (Car car : cars) {
        //    Integer integer = map.get(car);
       //    System.out.println(car+"  "+integer);
       // }
        Set<Map.Entry<Car, Integer>> entries = map.entrySet();
        for (Map.Entry<Car, Integer> entry : entries) {
            Car key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+" "+value);
        }

今日API
java.util.List
        // 静态方法
        static List<E> of(E... e): 返回包含指定元素的 不可变List 集合
        
java.util.Set
        // 静态方法
        static Set<E> of(E... e): 返回包含指定元素的 不可变Set 集合
        
java.util.Map
        // 静态方法
        static Map<K, V> of(K k1, V v1): 返回包含指定键值对的 不可变Map 集合

Map接口: 双列集合的根接口, 规定了共性的方法
        |_ HashMap类: 底层哈希表=数组+链表+红黑树. key无序不可重复, 可存null键null值, 线程不安全效率高
        |        |_ LinkedHashMap类: 哈希表+双向链表. 哈希表实现key不可重复, 双向链表实现key存取有序
        |
        |_ Hashtable类: 底层哈希表. Hash特性针对key, key无序不可重复, 不可存null键null值, 线程安全效率低
        |_ TreeMap类: 底层红黑树结构(存入时就排序). Tree特性针对key, 可以按照key排序, 要求key具备比较性
        |_ 遍历
                |_ keySet(): 获取所有key组成的Set集合, 遍历Set集合拿到key, 通过Map的get(key)得到value
                |        |_ 对于Set<Key>的遍历
                |                |_ 增强for
                |                |_ 迭代器
                |_ entrySet(): 获取所有的key和value组成的Entry对象的Set集合, 遍历出entry对象, 通过entry对象的getKey()获取对应的key, 通过Entry对象的getValue方法获取对应的value
                        |_ 对Set<Entry>的遍历
                                |_ toArray()
                                |_ 增强for
                                |_ 迭代器





day05 异常
异常继承体系为:异常的根类是 java.lang.Throwable,其下有两个子类:
java.lang.Error 与 java.util.Exception 。而Exception又分为编译时期异常:checked异常,与运行时期异常:runtime异常。
异常的分类:
错误(Error): 不能捕获处理的严重问题. 错误的格式都是"xxxError"
异常(Exception):可以捕获的问题,运行过程中就算发生异常,程序也能处理完继续运行
运行时期异常(runtimeException):runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)

常见异常
NullPointerException:空指针异常。
ArrayIndexOutOfBoundsException:数组索引越界异常。
ArithmeticException:算术运算异常。
NumberFormatException:数字格式异常。


throw与throws的区别
1.throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行
到throw语句时立即停止,它后面的语句都不执行。
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。
多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,
就会将异常对象抛给方法调用处。

try...catch...finally是捕获异常,自己处理,处理完毕后面的程序可以继续运行
a)try代码块中是可能出现异常的代码
b)catch代码块,是遇到异常,对异常进行处理的代码
c)finally代码块是无论是否发生异常,都必须执行的代码,用于释放资源.

对象.endwith(equale(""))  测试此字符串是否以指定后缀结束,返回布尔值
对象.startswith(s.equale(""))测试字符串和前缀是否一致。返回布尔值



今日API
java.lang.Throwable: 异常的顶级
        // 成员方法
        String getMessage(): 异常的信息. 没有原因返回null
        String toString(): 异常的类型和原因信息
        void printStackTrace(): 使用标准错误输出流打印异常信息
        
java.lang.Thread类: 表示线程. 实现了Runnable接口
    void start(): 启动线程, 即让线程开始执行run()方法中的代码





day06  多线程  同步


并行和并发
并行:指两个或多个事件同时发生
并发:两个或多个事件交给cpu,让cup交替运行。

继承Thread类,定义类继承Thread重写run()方法, 要执行的任务
创建子类的对象, 调用start()方法启动线程
Thread类中的start()方法与run()方法的区别:run只是调用方法,并不能开启线程,start:我全都要!
currentThread()获取当前线程的名称
获得主线程的名称:在测试类里面调用Thread.currentThread().getname();
获得子线程的名称:在继承类Thread里面调用Thread.currentThread().getname(),
也可以在测试类用匿名方法new Thread(){}.getName;

线程的6种状态:
NEW(新建)    Runnable(可运行)   Blocked(锁阻塞)   Waiting(无限等待)     
Timed Waiting(计时等待)===等于Thread.sleep   teminated(被终止)
   

同步线程synchronized(锁住唯一的对象,一般定义一个Object
类的没人用的对象或者对象的  字节码){
                                                   共享代码       }

获得字节码对象的3种方式(特点:唯一的一个)
1. 对象名.getClass() new RunnableImpl().getClass()
2. 类名.class RunnableImpl.class
3. Class.forName("类的全名"); Class.forName("com.itheima.test05.RunnableImpl");


lock.lock()获得锁,  lock.unlock()释放锁    lock.wait()  无限等待   
lock.notify()释放锁并返回到上边的lock.wait()

今日API
java.lang.Thread类: 表示线程. 实现了Runnable接口
        // 构造方法
    Thread Thread(): 创建Thead对象
    Thread Thread(String threadName): 创建Thead对象并指定线程名
    Thread Thread(Runnable target): 通过Runnable对象创建Thread对象
    Thread Thread(Runnable target, String threadName): 通过Runnable对象创建对象并指定线程名
        // 成员方法
    void run(): 用于让子类重写, 表示该线程要执行的任务.不能直接调用
    void start(): 启动线程, 即让线程开始执行run()方法中的代码
    String getName(): 获取线程的名称
    void setName(String name): 设置线程名称
        // 静态方法
    static Thread currentThread(): 返回对当前正在执行的线程对象的引用
    static void sleep(long millis): 让所在线程睡眠指定的毫秒

java.lang.Object类:
        // 成员方法 (只能通过"锁对象"调用)
        void notify(): 随机唤醒在同一个锁对象上的某一个处于等待状态的线程
        void notifyAll(): 唤醒所有在同一个锁对象上处于等待状态的线程
        void wait(): 让当前线程处于无限等待状态
        void wait(long timeout): 让当前线程处于计时等待状态, 时间到或被唤醒后结束此状态
        void wait(long timeout, int nanos): 让当前线程处于计时等待状态, 时间到或被唤醒后结束此状态









0 个回复

您需要登录后才可以回帖 登录 | 加入黑马