本质 | 类型参数化,做用就是将类型转换问题从运行时转移到编译期 |
语法 | 1 定义在类上 class ClassName<T>{} 2 定义在方法上 <T> void methodName(T t){} 3 通配符 <?> 可限制传入参数,但没法使用 泛型参数 需类型转换 4 上限 <? extends T > 接受 T及任意子类 5 下限 <? super T> 接受 T及任意父类 |
存放数据的集合,JAVA中实现Collection和Map的都是集合java
Vector:线程安全,基于动态数组,增加率为100%,ArrayList为50%
ArrayList:基于动态数组,查询快,增删慢。
LinkedList:基于链表,增删快,查询满。算法
PS : Hash散列算法 hash & (length-1) 经过Hash散列算法获取下标,HashCode冲突且equals为false时存入链表。当length为2的N次方时,能够最大程度减少HashCode冲突。数组
HashSet:底层由HashMap实现,容许null,惟一,无序
LinkedHashSet:底层由LinkedHashMap实现(适配器模式),不容许null,惟一,按插入顺序排序
TreeSet:底层由TreeMap实现,不容许null,惟一,按排序规则排序缓存
映射集合(键值对)
HashMap:基于Hash散列算法,键惟一,容许null,无序
LinkedHashMap:继承HashMap,键惟一,不容许null,按插入顺序排序
TreeMap:键惟一,不容许null,按排序规则排序,底层基于红黑树安全
HashTable:线程安全
ConcurrentHashMap:线程安全,锁分离多线程
本质 | 数据传输 | ||
分类 | 数据类型 | 字节流 字符流 |
|
数据流向 | 输入流 输出流 |
||
输入流 | 字节流 | InputStream | 字节输入流接口 |
ByteArrayInputStream | 字节数组输入流 | ||
FileInputStream | 文件输入流 | ||
BufferedInputStream | 高级流 缓存输入流 | ||
字符流 | Reader | 字符输入流接口 | |
InputStreamReader | 转换流 字符输入流 可指定字符集 | ||
BufferedReader | 高级流 缓存字符输入流 | ||
输出流 | 字节流 | outputStream | 字节输出流接口 |
ByteArrayOutputStream | 字节数组输出流 | ||
FileOutputStream | 文件输出流 | ||
BufferedOutputStream | 高级流 缓存输出流 | ||
字符流 | Writer | 字符输出流接口 | |
OutputStreamWriter | 转换流 字符输出流 可指定字符集 | ||
BufferedWriter | 高级流 缓存字符输出流 | ||
PrintWriter | 高级流 缓存字符输出流 自动行刷新 |
多线程 | 并发,合理使用能够提升效率,CPU给每一个线程分配时间片(几十ms),线程有建立与上下文切换的开销 | |
线程状态 | 新建 NEW 就绪 RUNNABLE 运行 RUNNING 阻塞 BLOCKED 死亡 DEAD |
|
建立线程 | 1 继承Thread 2 实现Runnalbe接口 3 实现Callable接口 |
|
线程池 | ![]() |
|
线程并发 | 三大特性 | 原子性 有序性 可见性 |
同步方案 | 1 volatile 类型修饰符 保证可见性 2 Synchronized 同步代码块,可修饰方法 代码块 3 ReentrantLock 显示获取/释放锁 |
|
线程操做 | 1 sleep() 使线程进入阻塞,可指定毫秒值,不释放锁 2 wait()/notify()/notifyAll() 等待(阻塞)唤醒(就绪)机制,可指定毫秒值,释放锁 3 yield() 使线程进入就绪,不释放锁 4 join() 当前线程进入阻塞,直到join线程执行结束,进入就绪,释放锁 |
反射 | 反射(Reflection)是Java 程序开发语言的特征之一,它容许运行中的 Java 程序获取自身的信息,而且能够操做类或对象的内部属性。 | ||
主要功能 | 1 在运行时判断一个对象所属的类 2 在运行时构造任意一个类的对象 3 在运行时判断任意一个类所具备的成员变量和方法(经过反射甚至能够调用private方法) 4 在运行时调用任意一个对象的方法 |
||
语法 | 注意: 调用私有属性时,需setAccessible(True)跳过java语言访问检查,不然抛出IllegalAccessException | ||
获取Class | 1 Class.forName(className) 2 类名.class 3 对象.getClass() |
||
对象 | 无参构造器 | newInstance() 调用无参构造器建立对象并返回 未定义无参构造器时,抛出InstantiationException |
|
获取构造器 | 1 getConstructor([types]) 获取指定参数类型列表的公有构造器 2 getConstructors() 获取全部公有构造器 3 getDeclaredConstructor([types]) 获取指定参数类型列表的构造器 4 getDeclaredConstructors() 获取全部构造器 |
||
调用构造器 | 构造器对象.newInstance([params]) 建立对象,调用私有构造器时, 请注意 | ||
方法 | 获取方法 | 1 getMethod(name[,types]) 获取指定方法名,参数类型列表的公有方法 2 getMethonds() 获取全部公有方法,包括继承类的公有方法 3 getDeclaredMethod(name[,types]) 获取指定方法名,参数类型列表的方法,但不包括继承方法 4 getDeclaredMethods() 获取全部方法,但不包括继承方法 |
|
调用方法 | 方法对象.invoke(obj[,params]) 调用指定对象方法,调用私有方法时, 请注意 | ||
字段 | 获取字段 | 1 getField(name) 获取指定字段名的公有字段 2 getFields() 获取全部公有字段,包括继承类的公有方法 3 getDeclaredField(name) 获取指定字段名的字段,但不包括继承字段 4 getDeclaredFields() 获取全部字段,但不包括继承字段 |
|
操做字段 | 字段对象.set(obj,val) 设置指定对象字段属性 字段对象.get(obj) 获取指定对象字段属性 操做私有字段时,请注意 |