Java核心类库(上)


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 ) 交换指定列表中指定位置的元素


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM