目录
Java核心类库
1. 常用的类
1.1 常用的包与功能描述
- java.lang 核心包,jvm自动导入。包含System,String......类。
- java.util 工具包,包含大量工具类与集合类,如Scanner,Random,List等。
- java.io 输入输出包,关于读写文件相关的类,FileInputStream,FileOutputStream等。
- java.net 网络包,提供大量网络编程相关类,ServerSocket,Socket等。
- java.sql 数据包,提供操作数据库的相关类,DriverManager类,Connection接口等。
1.2 Object类
- Object是java语言结构中的根,定义了“对象”的行为。所有类都是它的子类或是间接子类。如果一个雷没有使用extends声明父类,那么将默认继承自Object。
- Object()使用无参构造对象;boolean equals(Object obj)默认比较两个的地址;int hashCode()获取哈希码;String toString()返回调用对象的字符串形式(以上方法通常会重写);Class<?> getClass()返回调用对象的Class实例,反射用。
1.2.1 包装类
- 包装类是面向对象的一种思想,是指把一个变量打包封装处理变成对象,在这个流程中把变量声明为成员变量进行对象化处理的相关类。
- 在lang包中有如下分类:java.lang.Byte/Short/Integer/Long/Float/Double/Boolean/Character
分别对应byte/short/int/int/long/float/double/boolean/char
1.2.2 Integer类
- Integer类的内部包装了一个int类型的变量作为成员变量,并且提供由int到String类型之间的转换等方法。
| | |
| ---- | ---- |
| Integer(int value) | 根据参数指定的整数来构造对象(已过时) |
| Integer(String s) | 根据参数指定的字符串来构造对象 (已过时) |
| int intValue() | 获取调用对象中的整数值并返回 |
| static Integer valueOf(int i) | 根据参数指定整数值得到Integer类型对象 |
| boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
| String toString() | 返回描述调用对象数值的字符串形式 |
| static int parseInt(String s) | 将字符串类型转换为int类型并返回 |
| static String toString(int i) | 获取参数指定整数的十进制字符串形式 |
| static String toBinaryString(int i) | 获取参数指定整数的二进制字符串形式 |
| static String toHexString(int i) | 获取参数指定整数的十六进制字符串形式 |
| static String toOctalString(int i) | 获取参数指定整数的八进制字符串形式 |
自动装箱池
- Integer内部采用了自动装箱池的概念,打包好了-128到127之间的所有整数,直接调用池中的对象即可,提高效率。
1.2.3 Double类
- Double内部包装了一个double类型的变量作为成员变量,主要用于实现对double类型的包装并提供double类型到String类之间的转换等方法。
- 常用常量 public static final int SIZE--表示double类型的二进制数,public static final int BYTES--表示double类型的字节个数,public static final Class TYPE--表示double类型的Class实例
Double(double value) | 根据参数指定的浮点数据来构造对象(已过时) |
Double(String s) | 根据参数指定的字符串来构造对象 (已过时) |
double doubleValue() | 获取调用对象中的浮点数据并返回 |
static Double valueOf(double d) | 根据参数指定浮点数据得到Double类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static double parseDouble(String s) | 将字符串类型转换为double类型并返回 |
boolean isNaN() | 判断调用对象的数值是否为非数字 |
1.2.4 Boolean类
- public static final Boolean FALSE--对应基值为false的对象,public static final Boolean TRUE--对应基值为true的对象,public static final Class TYPE--表示boolean类型的Class实例
Boolean(boolean value) | 根据参数指定的布尔数值来构造对象(已过时) |
Boolean(String s) | 根据参数指定的字符串来构造对象 (已过时) |
boolean booleanValue() | 获取调用对象中的布尔数值并返回 |
static Boolean valueOf(boolean b) | 根据参数指定布尔数值得到Boolean类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static boolean parseBoolean(String s) | 将字符串类型转换为boolean类型并返回 |
1.2.5 Character类
- public static final int SIZE 表示char类型的二进制位数,public static final int BYTES 表示char类型的字节个数,public static final Class TYPE 表示char类型的Class实例
Character(char value) | 根据参数指定的字符数据来构造对象(已过时) |
char charValue() | 获取调用对象中的字符数据并返回 |
static Character valueOf(char c) | 根据参数指定字符数据得到Character类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static boolean isUpperCase(char ch) | 判断参数指定字符是否为大写字符 |
static boolean isLowerCase(char ch) | 判断参数指定字符是否为小写字符 |
static boolean isDigit(char ch) | 判断参数指定字符是否为数字字符 |
static char toUpperCase(char ch) | 将参数指定的字符转换为大写字符 |
static char toLowerCase(char ch) | 将参数指定的字符转换为小写字符 |
1.2.6 String类(重点) ⭐
- java.lang.String用于描述字符串,Java中的所有的字符串的字面值都可以用这个类描述。
- 从jdk1.9开始底层放弃char[]改用byte[]加编码标记,节约了一些空间。
该类表述的是一个常量,不可被更改。
String类中的常量池
- 由于String类中出现的字符串是常量不可被改变,所以JVM将第一次出现的字符串加入到常量池中,后续代码出现相同的字符串直接使用常量池中的对象,提高了性能。
常量优化机制
常用的构造方法
String() | 使用无参方式构造对象得到空字符序列 |
String(byte[] bytes,int offset,int length) | 使用bytes数组的下标从offset开始的length个字节构造对象 |
String(byte[] bytes) | 使用bytes数组中的所有内容构造对象 |
String(char[] value, int offset,int count) | 使用value数组的下标从offset开始的count个字符来构造对象 |
String(char[] value) | 使用value数组的内容构造对象 |
Sting(Sting original) | 根据参数指定的字符串来构造对象,新创建的对象是参数对象的副本 |
常用的成员方法
String toString() | 返回字符串本身 |
byte[] getBytes() | 将当前字符串内容转换为byte数组并返回 |
char[] toCharArray() | 转换为char数组并返回 |
char charAt(int index) | 返回指定位置的字符 |
int length() | 返回字符串序列的长度 |
boolean isEmpty() | 判断字符串是否为空 |
- 比较字符串内容
| | |
|:--😐:--😐
|int compareTo(String anotherString)|用于比较调用对象和参数的大小关系|
|int compareTolgnoreCase(String str)|不考虑大写,比较字符串内容|
String concat(String str) | 用于实现字符串的拼接 |
boolean contains(CharSequence s) | 用于判断当前字符串是否包含参数指定的内容 |
String toLowerCase() | 返回小写形式 |
String toUpperCase() | 返回大写形式 |
String trim() | 去掉前导和后继空白的字符串 |
boolean startsWith(String prefix) | 判断字符串是否以参数字符串开头 |
boolean startsWith(String prefix,int toffset) | 从指定位置开始是否以参数字符串开头 |
boolean endsWith(String sufflx) | 判断字符串是否以参数字符串结尾 |
boolean equals(Object anObject) | 用于比较字符串内容是否相等并返回 |
int hashCode() | 获取调用对象的哈希码值 |
boolean equalsIgnoreCase(String anoterString) | 用于比较字符串内容是否相等,忽略大小写 |
int indexOf(int ch) | 返回当前字符串中参数ch指定的字符第一次出现的下标 |
int indexOf(int ch,int fromlndex) | 用于从fromlndex位置开始查找ch指定的字符 |
int indexOf(String str) | 在字符串中检索str返回其第一次出现的位置,没有就返回-1 |
int lastIndexOf(int ch) | 用于返回参数ch指定的字符最后一次出现的下标 |
int lastIndexOf(int ch,int fromIndex) | 返回从fromIndex位置开始查找ch字符出现的下标 |
int lastIndexOf(String str) | 返回str字符最后一次出现的下标 |
int lastIndexOf(String str,int fromIndex) | 用于从fromIndex位置开始反向搜索的第一次出现的下标 |
String substring(int beginIndex,int endIndex) | 返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串 |
String substring(int beginIndex) | 返回字符串中从下标gebinIndex(包括)开始到字符串结尾的子字符串 |
正则表达式通常使用^开头,$结尾,也可以忽略
[abc] | 可以出现abc |
[^abc] | 除了abc |
[a-z] | a到z所有字符 |
[a-zA-Z0-9] | 大小写a到z,0到9 |
. | 任意一个字符 |
\d | 任意数字 |
\D | 任意非数字 |
\s | 空白字符串,等同于[\t\n\x0B\r] |
\w | 任意单词字符(数字字母下划线) |
\W | 任意非单字字符 |
X? | 表示X可以出现0或者1次 |
X * | 表示X可以出现0次或N次 |
X+ | 表示X不能不出现 |
X{n} | 必须出现N次 |
X{n, } | X必须出现大于N次 |
X{n,m} | X必须至少出现N次,不能超过M次 |
boolean matches(String regex) | 判断是否符合正则匹配规则 |
String[] split(String regex) | 参数regex是正则表达式,以regex表示的字符分割,将字符串拆分成字符串数组 |
String replace(char oldChar,char newChar) | 用new替换掉所有出现的old |
String replaceFirst(String regex,String replacement) | 替换此字符串匹配给定的正则表达式的第一个字符串 |
String replaceAll(String regex,String replacement) | 将字符串中匹配正则regex的字符串替换成replacement |
2. 可变字符串
- StringBuffer类是从jdk1.0开始存在,属于线程安全的类,因此效率比较低。
- StringBuilder类是从jdk1.5开始存在,属于非线程安全的类,效率比较高。
2.1 StringBulider常用构造方法
StringBulider() | 使用无参方式构造对象,容量16 |
StringBulider(int capacity) | 使用参数指定的容量构造对象 |
StringBulider(String str) | 使用参数指定字符串构造对象,长度为字符串长度+16 |
2.2 StringBulider常用成员方法
int capacity() | 返回调用对象的长度 |
int length() | 返回字符串的长度 |
StringBulider insert(int offset, String srt) | 插入字符串并返回调用对象的引用(自己) |
StringBulider append(String srt) | 追加字符串 |
StringBulider deleteCharAt(int index) | 将当前下表为index的字符删除 |
StringBulider delete(int start,int end) | 删除A-B之间的字符串 |
StringBulider replace(int start,int end,String str) | 替换字符串 |
StringBulider reverse() | 翻转字符串 |
- 作为参数传递的时候,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。
- StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:return
this。- 由此可见,这些方法在对StringBuilder所封装的字符序列进行改变后又返回了该对象的引用。基
于这样设计的目的在于可以连续调用。
3. 集合
3.1 集合的由来
- 当需要在Java程序中记录单个数据内容时,则声明一个变量。
- 当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。
- 当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。
- 当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。
- 当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合。
- 集合框架顶层是Collection与Map,其中前者单个元素,后者单对元素。
3.2 Collection集合
- java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此该接口里定义的方法既可用于操作List集合,也可用于操作Queue集合和Set集合。
3.2.1 常用方法
boolean add(E e) | 向集合中添加对象 |
boolean addAll(Collection<? extends E>c) | 用于将参数指定集合c中的所有元素添加到当前集合中 |
boolean contains(Object o) | 判断是否包含指定对象 |
boolean containsAll(Collection<?> c) | 判断是否包含参数指定的所有对象 |
boolean retainAll(Collection<?> c) | 保留当前集合中存在且参数集合中存在的所有对象 |
boolean remove(Object o) | 从集合中删除对象 |
boolean removeAll(Collection<?> c) | 从集合中删除参数指定的所有对象 |
void clear() | 清空集合 |
int size() | 返回包含对象的个数 |
boolean isEmpty() | 判断是否为空 |
boolean equals(Object o) | 判断是否相等 |
int hashCode() | 获取当前集合的哈希码值 |
Object[] toArray() | 将集合转换为数组 |
Iterator iterator() | 获取当前集合的迭代器 |
3.3 Iterator接口
3.3.1 基本概念
- java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素。java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭代器对象。
3.3.2 常用方法
- boolean hasNext() 判断集合中是否有可以迭代/访问的元素
- E next() 用于取出一个元素并指向下一个元素
- void remove() 用于删除访问到的最后一个元素
3.4 for each循环
- for each是简化版的迭代器
for(元素类型 变量名 : 数组/集合名称){循环体}
3.5 List集合⭐
3.5.1 基本概念
- java.util.List集合是Collection集合的子集合,该集合中允许有重复的元素并且有先后放入次序。
- 该集合的主要实现类有:ArrayList类、LinkedList类、Stack类、Vector类。
- 其中ArrayList类的底层是采用动态数组进行数据管理的,支持下标访问,增删元素不方便。
- 其中LinkedList类的底层是采用双向链表进行数据管理的,访问不方便,增删元素方便。
- 可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList更适合于
访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别。- 其中Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做栈(last in first out LIFO)。
- 其中Vector类的底层是采用动态数组进行数据管理的,该类与ArrayList类相比属于线程安全的类,效率比较低,以后开发中基本不用。
3.5.2 常用方法
void add(int index, E element) | 向集合中指定位置添加元素 |
boolean addAll(int index, Collection<? extends E> c) | 向集合中添加所有元素 |
E get(int index) | 从集合中获取指定位置元素 |
int indexOf(Object o) | 查找参数指定的对象 |
int lastIndexOf(Object o) | 反向查找参数指定的对象 |
E set(int index, E element) | 修改指定位置的元素 |
E remove(int index) | 删除指定位置的元素 |
List subList(int fromIndex, int toIndex) | 用于获取子List |
3.6 Queue集合
3.6.1基本概念
- java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系。
- 该集合的主要用于描述具有先进先出特征的数据结构,叫做队列(first in first out FIFO)。
- 该集合的主要实现类是LinkedList类,因为该类在增删方面比较有优势。
3.6.2 常用的方法
boolean offer(E e) | 将一个对象添加至队尾,若添加成功则返回true |
E poll() | 从队首删除并返回一个元素 |
E peek() | 返回队首的元素(但并不删除) |
3.7 Set集合
3.7.1 基本概念
- java.util.Set集合是Collection集合的子集合,与List集合平级。
- 该集合中元素没有先后放入次序,且不允许重复。
- 该集合的主要实现类是:HashSet类 和 TreeSet类以及LinkedHashSet类。
- 其中HashSet类的底层是采用哈希表进行数据管理的。
- 其中TreeSet类的底层是采用红黑树进行数据管理的。
- 其中LinkedHashSet类与HashSet类的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。
3.7.2 HashSet集合的原理
- 使用元素调用hashCode方法获取对应的哈希码值,再由某种哈希算法计算出该元素在数组中的索引位置。
- 若该位置没有元素,则将该元素直接放入即可。
- 若该位置有元素,则使用新元素与已有元素依次比较哈希值,若哈希值不相同,则将该元素直接放入。
- 若新元素与已有元素的哈希值相同,则使用新元素调用equals方法与已有元素依次比较。
- 若相等则添加元素失败,否则将元素直接放入即可。
3.7.3 TreeSet集合的概念
- 二叉树主要指每个节点最多只有两个子节点的树形结构。
- 满足以下3个特征的二叉树叫做有序二叉树。
a.左子树中的任意节点元素都小于根节点元素值;
b.右子树中的任意节点元素都大于根节点元素值;
c.左子树和右子树的内部也遵守上述规则;
- 由于TreeSet集合的底层采用红黑树进行数据的管理,当有新元素插入到TreeSet集合时,需要使
- 用新元素与集合中已有的元素依次比较来确定新元素的合理位置。
- 比较元素大小的规则有两种方式:
- 使用元素的自然排序规则进行比较并排序,让元素类型实现java.lang.Comparable接口;
- 使用比较器规则进行比较并排序,构造TreeSet集合时传入java.util.Comparator接口;
- 自然排序的规则比较单一,而比较器的规则比较多元化,而且比较器优先于自然排序;
3.8 Map集合 ⭐
3.8.1基本概念
- java.util.Map<K,V>集合中存取元素的基本单位是:单对元素,其中类型参数如下:
K - 此映射所维护的键(Key)的类型,相当于目录。
V - 映射值(Value)的类型,相当于内容。- 该集合中key是不允许重复的,而且一个key只能对应一个value。
- 该集合的主要实现类有:HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、Properties类。
- 其中HashMap类的底层是采用哈希表进行数据管理的。
- 其中TreeMap类的底层是采用红黑树进行数据管理的。
- 其中LinkedHashMap类与HashMap类的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。
- 其中Hashtable类是古老的Map实现类,与HashMap类相比属于线程安全的类,且不允许null作为key或者value的数值。
- 其中Properties类是Hashtable类的子类,该对象用于处理属性文件,key和value都是String类型的。
- Map集合是面向查询优化的数据结构, 在大数据量情况下有着优良的查询性能。经常用于根据key检索value的业务场景。
3.8.2 常用方法
V put(K key, V value) | 将Key-Value对存入Map,若集合中已经包含该Key,则替换该Key所对 应的Value,返回值为该Key原来所对应的Value,若没有则返回null |
V get(Object key) | 返回与参数Key所对应的Value对象,如果不存在则返回null |
boolean containsKey(Object key) | 判断集合中是否包含指定的Key |
boolean containsValue (Object value) | 判断集合中是否包含指定的Value |
V remove(Object key) | 根据参数指定的key进行删除 |
Set keySet() | 返回此映射中包含的键的Set视图 |
Collection values() | 返回此映射中包含的值的Set视图 |
Set<Map.Entry<K,V>> entrySet() | 返回此映射中包含的映射的Set视图 |
3.8.3 HashMap集合的原理
- 使用元素的key调用hashCode方法获取对应的哈希码值,再由某种哈希算法计算在数组中的索引位置。
- 若该位置没有元素,则将该键值对直接放入即可。
- 若该位置有元素,则使用key与已有元素依次比较哈希值,若哈希值不相同,则将该元素直接放入。
- 若key与已有元素的哈希值相同,则使用key调用equals方法与已有元素依次比较。
- 若相等则将对应的value修改,否则将键值对直接放入即可。
3.8.4 相关常量
- DEFAULT_INITIAL_CAPACITY : HashMap的默认容量是16。
- DEFAULT_LOAD_FACTOR:HashMap的默认加载因子是0.75。
- threshold:扩容的临界值,该数值为:容量*填充因子,也就是12。
- TREEIFY_THRESHOLD:若Bucket中链表长度大于该默认值则转化为红黑树存储,该数值是8。
- MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量,该数值是64。
3.9 Collections类
3.9.1常用方法
static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) | 根据元素的自然顺序返回给定集 合的最大元素 |
static T max(Collection<? extends T> coll,Comparator<? super T> comp) | 根据指定比较器引发的顺序返回 给定集合的最大元素 |
static<T extends Object & Comparable<? super T>> T min(Collection<? extends T>coll) | 根据元素的自然顺序返回给定集 合的最小元素 |
static T min(Collection<? extends T>coll,Comparator<? super T>comp) | 根据指定比较器引发的顺序返回 给定集合的最小元素 |
static void copy(List<? super T> dest,List<? extends T> src) | 将一个列表中的所有元素复制到 另一个列表中 |
static void reverse(List<?> list) | 反转指定列表中元素的顺序 |
static void shuffle(List<?> list) | 使用默认的随机源随机置换指定的列表 |
static <T extends Comparable<? super T>> void sort(List list) | 根据其元素的自然顺序将指定列表按升 序排序 |
static void sort (List list,Comparator<? super T> c) | 根据指定比较器指定的顺序对指定列表 进行排序 |
static void swap(List<?>list,int i,int j ) | 交换指定列表中指定位置的元素 |