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(); 
 } 
} 
 
 
 
 |   
        
 
    
    
    
     
 
 |