list集合的特点
1.元素存取有序
2.可以存储重复的元素
3.有索引
常见的数组结构
栈 结构特点:先进后出,出口和入口在同一侧
数组 结构特点:查询快,增删慢。
队列 结构特点:先进先出,出口和入口在两侧
单项列表 结构特点:由节点组成,查询快,增删慢
set集合的特点:1.元素不能重复2.没有索引
哈希表特点:哈希表由数组+链表/红黑树组成 功能是去重
可变参数格式:方法名(数据类型...变量名){ }
集合工具类
addAll(list,1,2,3,4) 添加多个元素
shuffle() 打乱
sort()排序
o1-o2 升序
o2-o1 降序
map集合特点
1.一个元素有一个key(键)+一个value(值)
2.key value的类型可以一样,可以不一样
3.key不能重复
4.一个key对应一个value
HashMap
key 存取无序
能存null值或null值
LinkedHashMap
key 存取有序
使用Map添加方法保存数据
put(K k,V v) 如果key不存在,则添加键值对,返回null
如果key存在,则添加旧值,返回旧值
使用键找值的方式遍历Map集合
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();
}
能够使用HashMap存储自定义键值对的数据
自定义JavaBean
作key:重写hashCode()equals()
作value:没有要求
程序中异常和错误的区别
错误:以Error结尾
异常:以Errorption结尾
异常的分类
编译时异常:Exception及其子类(除了RuntimException及其子类)
运行时异常:RuntimException及其子类
虚拟机处理异常的方式
1.打印出异常的详细信息
2.中断程序
创建的三个运行期异常
NullpointerException
ArrayIndexOutOfBoundsException
IndexOutOfBoundsException
ClassCastException
IllegalArgumentsException
IOException
FileNotFoundException
ParseException
try...catch关键字处理异常
try {
// 可能发生异常的代码
} catch (异常类型1 变量名) {
// 处理异常的代码
}
...
catch (异常类型n 变量名) {
// 处理异常的代码
} finally {
// 释放资源(无论如何都会执行)
}
能够使用thows关键字处理异常
方法名(参数列表) throws 异常类型1, 异常类型1,.. {}
自定义异常类
thows声明抛出
try...catch...捕获处理
进程的概念
内存中运行的一个程序
一个程序包含至少一个进程
线程的概念
进程中的一段代码执行路径
一个进程包含至少一个线程
程序>进程>线程(执行代码)
能够开启新线程
第一种:继承Thread类
1.定义类,继承Thread
2.重写run()方法,定义线程要执行的任务
3.创建子类对象,调用start()启动线程
java中多线程运行原理
随机性
抢占式,CPU告诉随机切换执行(本质),多个线程抢夺cpu的执行资源
内存
每个线程都有各自栈,堆共用
继承类的方式创建多线程
继承类Thread类,重写run方法
创建子类对象调用start()方法启动
实现接口的方式创建多线程
1.定义类,实现Runnable接口
2.重写run()方法,定义任务代码
3.创建Runnable实现类任务对象
4.创建Thread类对象,同时传入任务对象
5.使用Thread对象调用start()启动线程
实现接口方式的好处
1.避免了单继承的局限性
2.解耦
安全问题出现的原因
多个线程操作共享的数据
同步方法解决线程安全问题
// 锁对象: this
修饰符 synchronized 返回值类型 方法名(参数) {
}
// 该类的字节码对象 Class对象
修饰符 static synchronized 返回值类型 方法名(参数) {
}
1. 对象.getClass()
2. 类名.class
3. Class.forName("类全名")
线程6个状态的名称
NEW 新建
RUNNABLE 可运行
BLOCKED 锁阻塞
WAITING 无线等待
TIMED_WAITING 计时等待 wait(Long missis)
sleep(long millis)
TERMINATED 终结
继承Thread类
public class 类名 extends Thread {//子线程
//在子线程类中重写run方法,在run方法中打印子线程的名称;
public void run() {
// 打印子线程的名称
System.out.println(Thread.currentThread().getName());
}
}
测试(主线程)
public class ThreadDemo {
public static void main(String[] args) {
//在main方法中打印主线程的名称;
System.out.println(Thread.currentThread().getName());
//在main方法中创建子线程对象;
SubThread st = new SubThread();
//调用子线程对象的start方法,开启子线程。
st.start();
}
}
实现Runnable接口
public class 类名 implements Runnable {//子类任务
@Override
public void run() {
// 在子任务类中重写run方法,在run方法中打印子线程的名称。
System.out.println(Thread.currentThread().getName());
}
}
测试类
public class 类名 {
public static void main(String[] args) {
// 在main方法中打印主线程的名称。
System.out.println(Thread.currentThread().getName());
// 在main方法中创建一个子任务对象。
SubRunnable r = new SubRunnable();
// 在main方法中创建一个Thread类的对象,并把子任务对象传递给Thread类的构造方法。
Thread t = new Thread(r);
// 调用Thread类对象的start方法开启子线程。
t.start();
}
}
|
|