*java API阶段
java.lang.*:java最基础的包,这个包的类不需要导入。
java.util.*:java工具包,重点核心包
java.io.*:java数据流读写包
目录
-TreeSet:底层 红黑二叉树 (当链表数据长度大于8时转为红黑二叉树)
注意:IO流对象资源不会被垃圾回收器回收,所以一定要关闭IO,释放内存资源。
File:文件和目录路径名的抽象表示,文件可认为是相关记录或放在一起的数据的集合
6.内存流: 当输出流的目的,和输入流的源是内存时,这样的流称之为内存流
java.lang.*包
String:字符串类
String类代表字符串,字符串不变;它们的值在创建后不能被更改。
注意: 不适合数据串的频繁修改操作,数据查找效率高。
String类常用方法:
char charAt(int index) | 返回 char指定索引处的值。 |
---|---|
compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
String concat(String str) | 将指定的字符串连接到该字符串的末尾。 |
boolean contains(CharSequence s) | 当且仅当此字符串包含指定的char值序列时才返回true。 |
boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结尾。 |
boolean startsWith(String prefix) | 测试此字符串是否以指定的前缀开头。 |
boolean equals(Object anObject) | 将此字符串与指定对象进行比较。 |
byte[] getBytes() | 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。 |
byte[] getBytes(Charset charset) | 使用给定的charset将该String编码为字节序列,将结果存储到新的字节数组中。 |
int indexOf(String str) | 返回指定子字符串第一次出现的字符串内的索引。 |
boolean isEmpty() | 返回 true如果,且仅当 length()为 0 。 |
int length() | 返回此字符串的长度。 |
boolean matches(String regex) | 告诉这个字符串是否匹配给定的 regular expression |
String replace(char oldChar, char newChar) | 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。 |
String replaceAll(String regex, String replacement) | 用给定的替换替换与给定的 regular expression匹配的此字符串的每个子字符串。 |
String[] split(String regex) | 将此字符串分割为给定的 regular expression的匹配。 |
String substring(int beginIndex) | 返回一个字符串,该字符串是此字符串的子字符串。 |
String substring(int beginIndex, int endIndex) | 返回一个字符串,该字符串是此字符串的子字符串。 |
String toLowerCase() | 将所有在此字符 String使用默认语言环境的规则,以小写。 |
String toUpperCase() | 将所有在此字符 String使用默认语言环境的规则大写。 |
String trim() | 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 |
static String valueOf(Object obj) | 返回 Object参数的字符串 Object形式 |
字符串类:StringBuilder([线程不安全,可变的字符序列]。 字符串缓冲区就像一个String ,但可以修改.) StringBuffer ( [线程安全,可变的字符序列]。 字符串缓冲区就像一个String ,但可以修改.*注意: 频繁添加删除修改字符串时候,StringBuffer节约内存空间。) String
StringBuffer append(Object obj) | 追加 Object参数的字符串表示。 |
---|---|
int capacity() | 返回当前容量。 |
StringBuffer delete(int start, int end) | 删除此序列的子字符串中的字符。 |
StringBuffer deleteCharAt(int index) | 删除 char在这个序列中的指定位置。 |
StringBuffer insert(int offset, Object obj) | 将 Object参数的字符串表示插入到此字符序列中。 |
StringBuffer reverse() | 导致该字符序列被序列的相反代替。 |
总结字符串类的综合效率: StringBuilder > StringBuffer > String
数学运算类:Math
static double abs(double a) | 返回值为 double绝对值。 |
---|---|
static double sqrt(double a) | 返回的正确舍入正平方根 double值。 |
static double pow(double a, double b) | 将第一个参数的值返回到第二个参数的幂 |
static double floor(double a) | 返回小于或等于参数的最大(最接近正无穷大) double值,等于一个数学整数 |
static double ceil(double a) | 返回大于或等于参数的最小(最接近负无穷大) double值,等于一个数学整数 |
static double max(double a, double b) | 返回两个 double值中的较大值 |
static int min(int a, int b) | 返回两个 int的较小值 |
static double random() | 返回值为 double值为正号,大于等于 0.0 ,小于 1.0 。 => [0,1) |
static long round(double a) | 返回参数中最接近的 long ,其中 long四舍五入为正无穷大 |
*Object: toString() equal() finalize()
Object protected void finalize() 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。
基本数据类型: byte short int long float double boolean char
包装类: Byte Short Integer Long Float Double Boolean Character
float类型转换图:
自动装箱和自动拆箱
自动装箱:基本类型自动转化为包装类型
//1.Int -> Integer int value = 10; Integer it1 = new Integer(value); //JDK版本的变更,实现自动的吧int -> Integer 自动装箱 Integer it2 = 30; //1.5编译报错 实现值类型->引用类型转换赋值
自动拆箱:包装类型自动转化为基本类型
//2.Integer -> int int number = it2.intValue(); number = it1; //引用类型->值类型 1.5编译报错 自动拆箱
BigInteger 与 BigDecimal
常用类型
BigInteger add(BigInteger val) | 返回值为 (this + val) |
---|---|
BigInteger subtract(BigInteger val) | 返回值为 (this - val) |
BigInteger multiply(BigInteger val) | 返回值为 (this * val) |
BigInteger divide(BigInteger val) | 返回值为 (this / val) |
BigInteger remainder(BigInteger val) | 返回值为 (this % val) |
BigInteger not() | 返回值为 (~this) |
BigInteger or(BigInteger val) | 返回值为 (this|val) |
BigInteger shiftLeft(int n) | 返回值为 (this << n) |
BigInteger shiftRight(int n) | 返回值为 (this >> n) |
BigInteger xor(BigInteger val) | 返回值为 (this ^ val) |
BigInteger and(BigInteger val) | 返回值为 (this & val) |
System(系统类)
System类提供的System包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量;是一种加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) | 将指定源数组中的数组从指定位置复制到目标数组的指定位置。 |
---|---|
static long currentTimeMillis() | 返回当前时间(以毫秒为单位)。 |
static void exit(int status) | 终止当前运行的Java虚拟机。 |
static void gc() | 运行垃圾回收器。 |
java.util.*包(重点)
java.util.*(重点)
java.util.*:java工具包
1.Date:日期类,表示特定的时间
构造方法:
Date(long date) : | 分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数. 即1970年1月1日00:00:00 GMT。 |
---|---|
Date() : | 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。 |
方法:
(boolean )after(Date when) : | 测试此日期是否在指定日期之后。 |
---|---|
(boolean) before(Date when) : | 测试此日期是否在指定日期之前。 |
(int) compareTo(Date anotherDate) : | 比较两个日期进行订购。 |
(boolean) equals(Object obj) : | 比较两个日期来平等。 |
(long) getTime() : | 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒数 。 |
(void) setTime(long time) : | 设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点。 |
Date类型转换
- 1. java.util.Date -> java.sql.Date java.sql.Date date5 = new java.sql.Date(new java.util.Date().getTime()); - 2. java.sql.Date -> java.util.Date java.util.Date date6 = new java.sql.Date(0);
2.Calendar:日历
-创建对象: 子类构造 Calendar cl = new GregorianCalendar(); -静态方法构建日历对象 Calendar cl = Calendar.getInstance();
方法:
int get(int field) : | 返回给定日历字段的值。 |
---|---|
void set(int field, int value) : | 将给定的日历字段设置为给定的值。 |
void setTime(Date date): | 使用给定的 Date设置此日历的时间。 |
void setTimeInMillis(long millis) : | 从给定的长值设置此日历的当前时间。 |
void roll(int field, int amount): | 将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。 |
long getTimeInMillis() : | 以毫秒为单位返回此日历的时间值。 |
Date getTime(): | 返回一个 Date表示此物体 Calendar的时间值(毫秒从偏移 Epoch “)。 |
3.SimpleDateFormat
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和归一化。
4.Arrays
方法:
(static int) binarySearch(int[] a, int key) | 使用二叉搜索算法搜索指定的int数组的指定值。 |
---|---|
static int binarySearch(int[] a, int fromIndex, int toIndex, int key) | 使用二叉搜索算法搜索指定值的指定数组的范围。 |
static int[] copyOf(int[] original, int newLength) | 复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。 |
static void fill(int[] a, int val) | 将指定的int值分配给指定的int数组的每个元素。 |
static void sort(int[] a) | 按照数字顺序排列指定的数组。 |
5.Random
该类的实例用于生成伪随机数的流。
java集合框架
-List -Set -Map
java.util.List集合
变量:保存单个数据
数组:保存多个数据(基本类型+对象)
-由于数组的长度不可变,无法往数组中动态添加或者删除数据。
集合:多个对象数据
List集合:有序集合(也称为序列),列表通常允许重复的元素
-ArrayList:动态数组(即长度可以改变的数组),底层数据
特点:查询效率高,添加和删除效率低。
构造方法
ArrayList() | 构造一个初始容量为十的空列表。 |
---|---|
ArrayList(Collection<? extends E> c) | 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。 |
ArrayList(int initialCapacity) | 构造具有指定初始容量的空列表。 |
方法
boolean add(E e) | 将指定的元素追加到此列表的末尾。 |
---|---|
void add(int index, E element) | 在此列表中的指定位置插入指定的元素。 |
int size() | 返回此列表中的元素数。 |
E get(int index) | 返回此列表中指定位置的元素。 |
void clear() | 从列表中删除所有元素。 |
boolean contains(Object o) | 如果此列表包含指定的元素,则返回 true |
int indexOf(Object o) | 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
boolean isEmpty() | 如果此列表不包含元素,则返回 true 。 |
E remove(int index) | 删除该列表中指定位置的元素。 |
boolean remove(Object o) | 从列表中删除指定元素的第一个出现(如果存在)。 |
E set(int index, E element) | 用指定的元素替换此列表中指定位置的元素。 |
void sort(Comparator<? super E> c) | 使用提供的 Comparator对此列表进行排序以比较元素。 |
List<E> subList(int fromIndex, int toIndex) | 返回此列表中指定的 fromIndex (包括)和 toIndex之间的独占视图。 |
-LinkedList: 底层结构是双链表结构 特点:添加和删除元素效率高,查询元素数据效率底。
-Vector :底层数据结构 数组结构,线程安全的ArrayList 优点:查找元素的效率高,删除和添加元素效率低。
java.util.Set集合
*Set : 无序并且不可重复
-HashSet: 底层哈希表
JDK1.7之前: 哈希表(数组+链表) JDK1.8:哈希表(数组+链表+红黑二叉树)
-LinkedHashSet: 底层 哈希表 + 链表
方法同上HashSet
-TreeSet:底层 红黑二叉树 (当链表数据长度大于8时转为红黑二叉树)
特点:实现自然排序,查询某个元素效率较快。 添加元素,效率较低。 实现了自然排序。
ceiling(E e) | 返回此集合中最小元素大于或等于给定元素,如果没有此元素,则返回 null 。 |
---|---|
higher(E e) | 返回严格大于给定元素的该集合中的最小元素,如果没有此元素则返回 null 。 |
floor(E e) | 返回此集合中最大的元素小于或等于给定元素,如果没有这样的元素,则返回 null 。 |
lower(E e) | 返回这个集合中最大的元素严格小于给定的元素,如果没有这样的元素,则返回 null 。 |
last() | 返回此集合中当前的最后(最高)元素。 |
first() | 返回此集合中当前的第一个(最低)元素。 |
-Collections:
此类仅由静态方法组合或返回集合。 它包含对集合进行操作的多态算法,“包装器。 理解: Colleciton集合的包装类。
lamada表达式与Stream流式操作
基于Java 8 新特性:lamada表达式
面向对象: 接口式编程 面向函数编程
一、lamada表达式组成:
-
参数部分 () -参数类型可以省略 -当且仅当参数部分只有一个参数,则参数()可以省略
-
->
-
函数体部分 {} 只有一个表达式,{}可以省略。 只有一条语句{}可以省略。
4.方法引用:
-
类名::方法名 对象::方法名
-
类名:: new
-
二、Sream流式操作
接受声明于 java.util.function 包内的接口,例如 Predicate、Function、Consumer 或 Supplier,那么可以向其传lambda表达式
方法
static <T> Stream<T> generate(Supplier<T> s) : | 返回无限顺序无序流 |
---|---|
forEach(Consumer action): | 对流中的每个元素执行给定的操作。 |
limit(long maxSize): | 限制流的大小,只取前N个元素。 |
filter(Predicate predicate): | 根据给定的条件对流进行过滤,只保留满足条件的元素。 |
map(Function<T, R> mapper): | 将流中的每个元素通过给定的映射函数进行转换。 |
flatMap(Function<T, Stream> mapper): | 将流中的每个元素通过给定的映射函数转换为一个新的流,并将所有流合并为一个流。 |
sorted(): | 对流进行排序,默认按照元素的自然顺序进行排序。 |
java.util.Map集合
-HashMap:底层哈希表
特点: HashMap类大致相当于Hashtable ,线程不安全,并允许键和值都允许为null。
方法
boolean containsKey(Object key) | 如果此映射包含指定键的映射,则返回 true 。 |
---|---|
boolean containsValue(Object value) | 如果此地图将一个或多个键映射到指定值,则返回 true 。 |
void forEach(BiConsumer<? super K,? super V> action) | 对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。 |
V get(Object key) | 返回到指定键所映射的值,或 null如果此映射包含该键的映射。 |
boolean isEmpty() | 如果此地图不包含键值映射,则返回 true 。 |
Set<K> keySet() | 返回此地图中包含的键的Set视图。 |
V put(K key, V value) | 将指定的值与此映射中的指定键相关联。 |
void putAll(Map<? extends K,? extends V> m) | 将指定地图的所有映射复制到此地图。 |
V remove(Object key) | 从该地图中删除指定键的映射(如果存在)。 |
boolean remove(Object key, Object value) | 仅当指定的密钥当前映射到指定的值时删除该条目。 |
V replace(K key, V value) | 只有当目标映射到某个值时,才能替换指定键的条目。 |
boolean replace(K key, V oldValue, V newValue) | 仅当当前映射到指定的值时,才能替换指定键的条目。 |
int size() | 返回此地图中键值映射的数量。 |
Collection<V> values() | 返回此地图中包含的值的Collection视图。 |
-LinkedHashMap:链表+哈希表
-Hashtable:哈希表
该类实现了一个哈希表,它将键映射到值。 [线程安全的,键和值都不允许为null]。 [为了从散列表成功存储和检索对象,用作键的对象必须实现hashCode方法和equals方法]。
方法:
Enumeration<K> keys() |
---|
返回此散列表中键的枚举。 |
-TreeMap:红黑二叉树
-ConcurrentHashMap: 哈希表
泛型
1.泛型类定义:
[访问修饰符] class 类名<泛型..>{
}
2.泛型方法:
[访问修饰符] <泛型> 返回值类型 方法名(泛型类型 参数名){
}
泛型上限:
- 格式: 类型名称<? extends 类> 对象名称`
- 意义: 只能接收该类型及其子类
泛型上限:
- 格式:`类型名称<? super 类> 对象名称`
- 意义:只能接收该类型及其父类类型
java.IO.*包
1.IO流
流定义:
IO指的是Input/output,IO流:输入输出流,统称为数据流。
-流向划分:1.输入流[Input] 2.输出流[Output]
-数据传输单位方式划分:1.字节流(InputStream|OutputStream) 2.字符流(Reader|Writer)
按功能分:1.节点流:用于直接操作目标设备的流
2.处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更强大、灵活的读写功能
File:操作文件或目录名各项属性和文件或者目录的创建删除
注意:IO流对象资源不会被垃圾回收器回收,所以一定要关闭IO,释放内存资源。
2.File作用:读写文件数据和文件属性
File:文件和目录路径名的抽象表示,文件可认为是相关记录或放在一起的数据的集合
2.1.构造方法:
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例。 |
---|---|
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例。 |
2.2.方法
boolean canRead() | 测试应用程序是否可以读取由此抽象路径名表示的文件。 |
---|---|
boolean canWrite() | 测试应用程序是否可以修改由此抽象路径名表示的文件。 |
boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 |
static File createTempFile(String prefix, String suffix) | 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 |
boolean delete() | 删除由此抽象路径名表示的文件或目录。 |
boolean exists() | 测试此抽象路径名表示的文件或目录是否存在。 |
File getAbsoluteFile() | 返回此抽象路径名的绝对形式。 |
String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串。 |
String getName() | 返回由此抽象路径名表示的文件或目录的名称。 |
String getParent() | 返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。 |
File getParentFile() | 返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。 |
boolean isFile() | 测试此抽象路径名表示的文件是否为普通文件。 |
long length() | 返回由此抽象路径名表示的文件的长度。 |
String[] list() | 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 |
File[] listFiles(FileFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
boolean mkdir() | 创建由此抽象路径名命名的目录。 |
boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 |
3.字节流:图片,视频,音频等原始字节文件
-FileInputStream: 输入流如果文件不存在,则抛出FileNotFoundException。 -FileOutputStream: 输出流如果文件不存在,则自动创建文件然后写入数据。
4.字符流
-FileReader(输入流) -FileWiter(输出流)
5.缓冲流
5.1BufferedReader:
BufferedReader :从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取.
构造函数:
BufferedReader(Reader in) | 创建使用默认大小的输入缓冲区的缓冲字符输入流。 |
---|---|
BufferedReader(Reader in, int sz) | 创建使用指定大小的输入缓冲区的缓冲字符输入流。 |
5.2BufferedWriter:
BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入.
构造函数:
BufferedWriter(Writer out) | 创建使用默认大小的输出缓冲区的缓冲字符输出流。 |
---|---|
BufferedWriter(Writer out, int sz) | 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。 |
6.内存流: 当输出流的目的,和输入流的源是内存时,这样的流称之为内存流
ByteArrayOutputStream ByteArrayInputStream
CharArrayReader CharArrayWriter
7.转换流
字节流(1) -> 字符流(2) InputStreamReader OutputStreamWriter
8.打印流(输出流)
PrintStream: 为另一个输出流添加了功能,即能够方便地打印各种数据值的表示. PrintWriter:将对象的格式表示打印到文本输出。
9.对象流: 对象流没有字符输入/输出流
注意: 1.序列化不会写出任何不实现java.io.Serializable接口的对象的字段(Serializable 默认的序列化) 2.实现Externalizable接口允许对象完全控制对象的序列化表单的内容和格式。 调用Externalizable接口writeExternal和readExternal的方法来保存和恢复对象的状态 3.static 或者 transient 修饰的字段是不能够被序列化
10.Object
ObjectInputStream: 字节流 (对象信息持久化) -> 程序中 -> java对象信息 反序列化ObjectOutputStream: 对象信息 -> 字节流 (对象信息持久化) 序列化
ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。
11.进程和线程
进程:每个独立执行的程序称为进程。
线程:是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源,多个线程共享内存,从而极大地提高了程序的运行效率。
多个线程组合成一个进程
11.1.进程与线程的关系
—进程的产生,肯定会产生至少一个以上的线程;
—进程关闭,该进程内的线程会全部销毁;
—线程销毁,进程未必会关闭
多线程:多线程指的是一个进程内的多个任务并发执行。
多线程好处:可以更高效地利用CPU资源,同时,让固定流程的程序更加灵活;