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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 惜言 初级黑马   /  2018-11-20 15:58  /  583 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

四日份的笔记

       没错,是我,那个可爱又迷人的反派角色又回来了,带着四日份的笔记,bulingbuling 的,不知不觉,一个星期已经过去了,又到了交公粮的时候,那我只好奉上啦.

D03

数据存储的常用结构有:栈、队列、数组、链表,和红黑树.哈希表
栈: 先进后出;队列 先进后出 数组 增删慢 查询快 链表 增删快 查询慢 红黑树 都挺快的 哈希表的增删速度和查询速度 都挺快的
list集合
list集合是有索引的,可以拥有重复的元素
list集合中常用的四种方法  增删改查 list.add(int index, element x) 增 list.remove(index) list.set(int index, element x) list.get(index)
list的子类有 ArrayList 和linkedlist
ArrayList 的底层结构是一个数组 增删比较慢 查找较快
Linkedlist 的底层结构是一个链表 ,增删的速度快 但是查找比较慢
Linkedlist 特有的几种方法 addfirst addlast pop push first last
set集合
set取出元素的方法 有迭代器和增强for循环
主要有的Hashset 储存元素的底层结构是哈希表 不能储存哈希值相同的元素 存储没有顺序
可以通过自己定义重写 HashCode 和 equals 来判断有无重复
linkedhashset是hashset 的一个子类 底层结构是又链表和红黑树组成的
可变参数  写法是 变量类型 ....变量名好多个 类似于一个数组
Collections
常用的功能有 shuffle 打算集合的顺序  addall 加入一堆元素
sort是来负责给集合排序的 方法有两种  
一种是直接使用sort 集合名 会按照系统定义好的格式排序
还有一种是在自己定义的类中实现comparable接口覆盖重写compara方法按照自己的方法判断 然后排序
还有就是 comparator 可以在 测试类中 重写 比较灵活
D04
Map 的特点
1. 一个元素有一个key+一个value
2. key value的类型可以一样, 可以不一样
3. key不能重复
4. 一个key对应一个value
HashMap
        key 存取无序
        能存null值或null键
LinkedHashMap
        key 存取有序
如何使用map方法保存数据
V put(K k, V v)
    如果key不存在, 则添加键值对, 返回null
    如果key存在, 则替换旧值, 返回旧值
keySet()
Set<键> set = map.keySet();
for (键类型 key: set) {
    值 = map.get(key);
}
键值对的方法遍历map
entrySet()
Set<Map.Entry<键, 值>> set = map.entrySet();
for (Map.Entry<键, 值> entry : set) {
    entry.getKey();
    entry.getValue();
}
D05
异常分为运行期异常RuntimeException和编译期异常 IOException
Exception,异常 error 错误
常用的三个方法,printStackTrace打印异常的详细信息,
getMessage 获取异常发生的原因
toString 获取异常的类型和异常描述信息
异常的两种处理方式
Throw 抛出异常 交给调用者去解决 ,如果调用者也没解决,将会在虚拟机中报错,并终止程序(挂掉)
另一种是 try{}catch{} 捕获异常 将可能发生异常的代码 放在 try的大括号中,然后再catch 中去处理
finally 代码块是写在 try ...catch 后边  不能够单独使用
写在finally中的代码 不会因为程序异常而停止 ,肯定会执行的
异常注意事项
运行时异常被抛出可以不处理。即不捕获也不声明抛出。
如果finally有return语句,永远返回finally中的结果,避免该情况.
如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常。
父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
一些系统中没有给出的异常,我们可以自己定义出来
定义一个类 继承 Exception 或者RuntimeException
然后创建无参满参构造
在测试类中直接调用
多线程 java 是基于并发的
进程是包含好多个线程的
创建新的线程是 new Theard
D06
Java中多线程的运行原理
随机性:抢占式,CPU高速随机切换执行(本质),多个线程抢夺CPU的执行资源
内存,每个线程都有各自栈,堆公用
使用继承类的方式创建多线程,继承Thread类 创建子类对象调用Start() 方法启动
使用实现借口的方式创建多线程
定义类,实现Runnable借口,重写run()方法,定义任务代码,创建Runnable实现类任务对象
创建Thread类对象,同时传入任务对象,使用Thread对象调用start()启动线程
实现接口方式的好处: 1避免了单继承的局限性; 2 解耦
安全问题出现的原因:是多个线程同时操作共享的数据的结果
同步代码块是用来解决线程安全问题的一种;格式是synchronized(锁对象){}
锁对象: 可以是任意类型的,但是必须是多个线程共享的唯一一个对象
还有一种解决线程安全问题的方法 是使用同步方法:格式是
修饰符 synchronized 返回值类型 方法名(参数){}
修饰符  static synchronized 返回值类型 方法名(参数){}
对象.getclass() 类名.class Class.forName("类全名")
线程6个状态的名称
new 新建 RUNNABLE 可运行 BLICKED 锁阻塞 WAITING 无限等待 wait()(没有唤醒是不会启动的)
TIMED_WAITING 计时等待 wait(long millis) sleep(long millis) TERMINATED 终结
那就到这里了 sayonara!!!!!!!!





0 个回复

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