JAVA自学-DAY09

136-146完成

Java集合框架

Collection : List 有序,可重复的集合ArrayList, Set无序,不可重复的集合 HashSet和TreeSet, Queue代表队列ArrayDeque,PriorityQueue

Map HashMap

ArrayList 是有序的

经过证实,在删除前面的元素,后面的元素会自动往前移

线程状态

new - (调用start)就绪状态 - 堵塞钻沟通 - 运行状态 - 死亡状态

打印当前系统时间+计

什么叫每一个对象都有一个锁?锁是什么

yield和join

一个是礼让,一个是插队

线程优先级

守护线程:thead.setDaemon 虚拟机不等待 守护线程

线程同步:一种等待机制

并发---多个线程访问一个对象

队列 + 锁(synchronized) 是为了保护线程的安全

1.同步代码块:

synchronized(同步监视器){

//需要被同步的代码

}

继承Thread类的方式中,同步监视器用类.class

Runnable 方式中,同步监视器可以考虑用this

***类.class 就是唯一的对象,万物皆对象

2.同步方法 如果共享数据的代码完整的声明在了一个方法,可以将这个方法声明为同步方法。

非静态的同步方法默认就是this

静态的同步方法默认是类.class

synchronized好处:解决了线程的安全问题;弊端:性能降低

多线程的复习:

程序:一段静态的代码

进程:动态的,为操作系统调度和分配资源的最小单位

线程:一个进程中由多个线程,线程作为cpu调度和执行的最小单位

创建多线程的方法:

方式1:继承Thread

方式2:实现Runnable接口

方式3:实现Callable接口

方式4:实现线程池

继承是单一的,而实现可以多元化,推荐使用Runnable

常用的构造器和方法:

优先级:

线程的声明周期:jdk5.0之前

jdk5.0之后

NEW - RUNNABLE - BLOCKED - WAITING - TIMED_WAITING - TERMINATED

如何解决线程的安全问题

多个线程操作共享数据,就有可能出现问题

同步机制:①同步代码块 ②同步方法

jdk5.0新增:Lock接口及其实现类。

》》》11章常用类和基础API《《《

String类的理解(JDK 8.0)

1.1类的声明

final:String 是不给被继承的

Serializable 可序列化的接口。可以通过网络或本地流进行数据的传输

Comparable 凡是实现此接口的类,其对象都可以比较大小

1.2内部声明的属性:

jdk8.0

private final char value[] ; //粗存字符串的容器

jdk9.0之后

private final byte[] value;

2.字符串常量池的存储位置

字符串常量都储存在StringTable中,字符串常量池

字符串常量池不允许存放两个相同的字符串常量

字符串常量池,jdk7之前,存放在方法区;

jdk7之后,存放在堆。

3.字符串的不可变的特性

①当对字符串变量重写赋值时,需要重新指定一个字符串常量的位置进行赋值,不能再原有的位置修改;

②对现有的字符串拼接时,需要重新开辟空间保存拼接以后的字符串

③replace ,需要重新开辟空间保存拼接以后的字符串

4.String实列化的两种方式

  • String s1 = "Hello"
  • String s1 = new String("Hello")

String s2 = new String("Hello") 创建了几个对象 ? 两个!

5.String 的连续操作

  1. 常量 + 常量:结果任然在字符串常量池
  2. 常量 + 变量 或变量 + 变量 :都会通过new的方式创建一个新的对象,返回对2空间中此字符串对象的地址值。
  3. 调用字符串的intern:返回的就是字符串常量的地址值

concat():不管是常量调用还是变量调用,都会返回一个新的对象

6.构造器和常用方法

7.StringBuffer 和 StringBuilder

String : 不可变的字符序列;(底层使用char[] JDK8.0之前)

StringBuffer:可变的字符序列;JDK1.0出现;线程安全,效率低点;

StringBuider:可变的字符序列;JDK5.0出现;线程不安全,效率高点;

数组的默认长度为16,创建一个数组时,会根据”abc“ . length + 16

如果需要经常对数组增删改查,就使用 StringBuffer 和 StringBuilder

如果不用考虑安全问题就用StringBuilder

常用方法:

  1. 增:append()
  2. 删:delete(int start , int end);delete (int index)
  3. 改:replace(int start , int end ,String str) setCharAt(int index , char c)
  4. 查:charAt(int index)
  5. 插:insert(int index , xx)
  6. 长度:length()
  7. 反转:reverse()

8.对比三者的执行效率

StringBuilder > StringBuffer > String

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值