黑马程序员技术交流社区

标题: 成都校区 [打印本页]

作者: pangyu    时间: 2018-12-12 18:37
标题: 成都校区
1.application 应用程序
  architecture 架构 系统架构 体系结构
  parameter 参数
  assign 指定
  associate 关联
  attribute 属性
  backward compatible 回溯相容 向下兼容
  block 区块 语句块
  brace 大括号
  breakpoint 断电
  
2.object类(为所有类的父类,没有指定继承父类,则
自动继承object类)中的方法
        toString
       
新建类都是默认继承object类 继承了toString方法
String s= p.toString(s);
直接打印会出现对象地址值,所以需要重新toString方法
重写后 return返回什么 打印什么 。
直接使用快捷键进行 方法重写

看一个类是否重写了toString方法 直接打印这个类对象
名字即可,出现地址值 则没有重写。否则出现
重写格式
例如 Random没有进行重写 toSring
而 Scanner 和Arraylist进行了重写

3.object中的equals方法
==比较地址值
equals进行内容比较
如果没有重写1         是调用默认equals中方法
  默认比较两个对象地址值 没有意义
  重写后比较属性

  使用向下转型 将Object类转为所需要的类
  Person p = (Person)obj
equals 比较对象内容
== 比较地址 和基本类型   

-------------equals 不进行复写 和==没有区别
4.字符串的比较
用equals 和== 都可以比较出结果

new出来的字符串只能用equals比较
进行内容比较
所以之后有关字符串对比 都使用equals

5.Objects 类中的方法
会自动忽略空指针异常的问题
例如equals
Objects。equals(s1,s2);

-----------为空还调方法 就会报出空指针异常

6.date类
util包下类 需要导入包
精确到毫秒 千分之一秒
作用:可以对时间和日期进行计算

sout(System.currentTimeMillis())
获取当前系统时间

Date(毫秒值 long类型)一串数字加L
毫秒转换成时间 有参构造

时间转成毫秒
date对象.getTime()
返回long类型毫秒

获取当前系统世家能转换成毫秒
Date date = new Date();
date.getTime();
就可以得到当前时间

7.DateFormat为抽象类
SimpleDateFormat 为已知子类
格式化 日期到文本格式转换
解析 把文本转换为日期

yyyy年MM年dd HH时mm分ss秒
格式区分大小写

SimpleDateFormat sdf = new SimpleDateFormat(yyyy。。。。))
Date date = new Date();
String text = sdf.format(date);

返回值为字符串

创建Simpleformat 格式 后创建对象进行操作
parse 字符串转日期 需要进行抛出异常
format 日期转字符串

8.抛出异常

9.Calendar
getInstance   为Calendar的子类对象  
Calendar c = Calendar.getInstance();

10 字符串底层是被final修饰的数组
创建之后不可改变
拼接效率不高

利用Stringbuilder 连接字符串
StringBuilder sb = newStringB();
sb.append();
sb.append();
sb.append();7

11.String builder
和 toString之间相互利用
进行转换

12.包装类
基本数据类型 包装类
可以调用方法
13.装箱与拆箱

14.基本数据类型和字符串之间的转换
除了Character类之外 其他类都有这个方法

15.Integer 比较 -128到正127之内数字 可以用==
之外用equals
相同的原因
-128到127是存在常量池中;
1.集合的整体框架
Collection接口

list接口 为有序集合
                 可以存储重复元素
                 包含带索引的方法(get等);

set接口 不准许重复元素
                没有索引               
                其中的HashSet为无序集合
                LikedHashSet为有序集合
               
2.集合框架学习方式
学习顶层中的共性方法,底层都可使用
使用底层
3.迭代器 通用遍历集合的方式
hasNext 存在下一个元素则返回true

next 返回迭代器的下一个元素
使用步骤 使用集合中的方法 iterator()
     使用hasNext来判断是否为最后一个元素
         使用next取出元素
         
foreach(取出来存贮的地方:遍历的东西)
1.compatible 相容兼容
  comlile time 编译器
  composition 复合 合成
  concrete 具象 实在
  concurrent 并发
2.数据结构(存储结构,)
------------------
栈:先进后出
出口入口在同一侧
入栈/压栈
出栈/弹栈

3.队列queue
先进先出
入口和出口在集合两侧 所以可以先进先出

4.数组
查询快
增删慢:创建新数组 选择需要的数据进行复制才可以

5.链表
查询慢:链表中地址不连续,每次查询元素必须从头开始查询

增删快:增加删除对链表结构没有任何影响。

单项链表:只有一条链子,存储元素和取出元素顺序不一定一致
双向链表:两条链子,其中一条是专门记录元素顺序的,是一个有序的集合。

链表中每一个元素都是一个节点
一个节点包含一个数据源(存储数组)两个指针域(前后元素地址)

6.生活中的树
计算机中的树为倒置 二叉树(分支不能超过两个)

排序树 在二叉树基础上,元素是有大小顺序的
左子树小 右子树大。

平衡树 :左孩子数量等于右孩子数量
相反不一致则称为 不平衡树

红黑树 查询次数最大和最小不能大于二倍
约束:节点可以使红色或黑色
                根节点为黑色
                叶子节点(空节点)为黑色
                每个红色节点的子节点都是黑色的
                任何一个节点到每一个叶子节点的所有路径上的黑色节点数相同
7.list接口
三大特点 有序集合
存储元素和取出元素顺序一致
存在索引
允许存储重复元素

list操作 增删改查
相比之前list操作 增加许多 存在索引值的操作
指定位置增删改

list遍历的三种方式

for
迭代器
foreach               
8. LinkedList 构 大量操作首尾元素的方法
        查询慢 增删快:增加删除对链表结构没有任何影响。
       
       
        LinkedList -----------------
       
        push 将元素推入列表所在堆栈,等效addFirst
        addFirst()加入列表开头元素
       
        addLast 功效等于add();
       
        getFirst/getLast 得到第一或最后一位元素
       
        linked。clear 清空后不能再对列表进行操作
       
        removeFirst/removeLast
        pop功效等于removeFirst 移除第一个元素
               
9.单列集合vector(了解)

10、set和list平级
HashSet《》set = new HashSet《》();

set。add
特点 无序,添加顺序与显示顺序无关
         重复元素自动删除 不可重复
         没有索引值 不能使用for循环遍历
         
hashSet 无重复
                无索引
                无序集合
                底层为哈希表结构 查询速度非常快
遍历可以使用迭代器遍历和增强for遍历

               
11.哈希表存储数据的结构
1.8之前为数组+链表结构
1.8之后 数组+红黑树 提高查询速度

哈希表特点 查询速度快


12.存储数据到集合中 先计算哈希值
红黑树结构
哈希表下方同样数值元素所挂元素超过八位
就会转成红黑树结构

13 set不允许存储重复元素的原因
set。add方法会调用元素的hashCode方法计算字符串的哈希值
哈希值是多少存储在集合中,寻找是否有相同值元素
发现没有就会存储进去

当第二个相同字符串也进行添加时 会寻找相同的值。
发现有相同,则有(哈希冲突)
第二个字符串你则会调用equals方法
与哈希值相同元素进行比较
相同则不会存储

重写hashCode方法??????
equals方法????

14.hashset 集合存储自定义元素
set集合报错元素唯一
加入自己存储 person类
需要进行重写 才能实现重复元素不能存储的特性2

15LinkedHashSet
与HashSet相比 多了一条链表 用来存储顺序
保证有序


红黑树原理 顶层为平衡数字 最平均的数字
每一个数字都存在最右边 但会进行旋转

16.使用可变参数add();
方法参数列表数据个数不定
method(int...a)

调用时自动创建

(Object obj)可以写OBJ类型
可变参数一定要写在前面

17.添加集合元素 批量添加
Collections。addAll(list,元素列表)
ss
Collections。shuffle(list)打乱集合元素

18.sort 使用时 如果使用自定义时
需要重写compareto方法
自己-参数 为升序

在这个类中实现Compare接口 进行重写 ‘’‘’‘’‘’‘’‘’‘’‘’‘

19
comparator
比较
Collections.sort(list,new Comparator<Student>())

01-02 升序








1.map
集合
map<key,value>
Collection 单一存在的元素

map中一个元素包含两个值 key v
map为双列集合 键唯一 值重复
map集合中 key和value的数据类型
可以相同 可以不同
map中键值一一对应

2.map子类
HashMap 依然是哈希表结构
特点:查询速度快
hashmap集合无序 存储元素 取出元素顺序
有可能不一致

LinkedHashMap 可以保证顺序

3.只要是map就是双列集合
4.hashMap中的方法

put方法 存储时如果key不重复
返回值为空
如果key重复 会使用新的数值进行替换
返回被替换的值

remove key存在 返回被删除的值 没有
返回空

get 取值

containsKey 是否含有指定key
包含返回true 不包含返回false

5.遍历集合

首先获取map中所有keyset集合
然后进行遍历
  set《String》 keys = map。keySet();
  
  map中的keyset方法 就是取出所有
  key的集合 存储到一个set中

6.entry 键值对对象
map.entry<k,v>;

7.hash table 底层是哈希表 是个单线程集合 线程安全
速度慢
hash map 底层哈希表 不安全线程集合 多线程集合
速度快

hashMap 包括之前的集合都能存储null值
                                                                null键
hashTable不能存储

Hashtable 被hashMap取代
vector 被Arraylist取代

properties 集合 是唯一和io流相结合的集合

8.线程???HashMap线程不安全?

9. jdk9对添加元素的优化
list set map 增加静态方法 of
可以使集合一次性添加多个元素

set 和map之内不能放重复元素

一次性添加之后 不能再使用add进行添加








并发修改异常------------
迭代器 或者增强for循环 再运行时不可以增加删除数据, 底层迭代器无法运行

1.异常
最顶层父类 throwable
error                exception
错误                        异常

2.相当于创建了空指针异常对象
停止程序运行
创建异常对象 抛出给虚拟机jvm
jvm做了两件事 打印 终止运行

3.异常分类
Exception 编译异常
        使用try catch 后 可以执行后续代码 并且
        报出错误  

       
RuntimeException 运行异常

4.编译器异常我们需要自己写
抛出异常代码
或者try catch处理

运行时异常则不需要写

5.throw关键字

throw 必须写在方法内部
后面new的对象必须是exception或者exception的
子类对象
throw关键字后面创建的是 runtimeException
或者其子类,我们可以不处理 默认交给jvm'
处理


必须先对传递过来的参数进行合法性校验
使用抛出异常的方式

6.异常方法

73、 32
3getMessage

toString
printStackTrace 最全信息


7.打开程序
从内存打开 形成--进程
线程是进程的一个执行单元 负责程序执行
8.
线程调度

分时调度  轮流分配cpu时间
.

抢占式调度 java使用抢占式调度 根据线程优先级使用cpu 可以通过设置优先级进行变更


9.主线程
执行主方法的线程 单线程程序

多线程程序只是提高cpu的的利用率

平时使用程序为单线程

10、Thread类
创建线程
继承 thread类 重新run方法
在方法中 设置线程任务 开启线程
创建对象 调用start方法。
开启新的线程 执行run方法

1.线程
main方法压栈
创建对象 在堆中
调用run方法则为单线程
start则为多线程
2.新线程的方法 runnable

3.两种方式的区别
实现Runnable的好处
1,避免了单继承的局限性
一个类只能继承一个类,若采用第一种方法
则不能继承其他类
Runnable则不存在这种问题
2.增强了程序的扩展性
降低了程序的耦合性
实现Runnable接口的方式其实
把设置线程任务和开启线程进行
分离


4.线程安全问题
  
















































               
               
               
               
               
               
               
               
               
               
               
               
























欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2