常用类的概述和使用
常用的包
java.lang包 核心包 里面提供了核心类库
java.util包 工具包
java.io包 输出输出包
java.net包 网络包
java.sql包 数据库包
Object类
基本概念:Object是java类层次的根类,任何一个类都是Object类的直接或者间接子类
常用的方法:
Object() 无参 子类通过Super()进行调用
boolean equals(Object obj) 重写
int hashCode() 哈希码值,与equals保持一致 一旦重写equals也要重写hashCode
String toString()
Class<?> getClass() 反射
包装类
包装类的概念:基本数据类型的包装(八种包装类)
包装类的分类
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.Boolean
java.lang.Character
Integer类的概述(其他类概念常量方法类似)
基本概念:包装了int基本类型的成员变量进行包装
常用的常量 Integer.MIN_VALUE Integer.MAX_VALUE Integer.BYTES Integer.SIZE Integer.TYPE
常用的方法
构造 intValue() valueOf() toString() toBinaryString toHexString(i) toOctalString(i) parseInt()
装箱和拆箱的概念
Integer-->int 拆箱
int-->Integer 装箱
自动装箱池
-128~127
包装类(Wrapper)的实用总结
1.基本数据类型转换成对应包装类的方法
构造方法 new Integer()
静态方法 Integer.valueOf()
2.包装类对象中基本数据类型变量数值的方法
XXXvalue()
3.字符串转换为基本数据类型的方式
parseXXX()
数字处理类
Math类的概念
数学运算 最大值 最小值
BigDecimal
精准
BigInteger
大型整数
String类
概念:描述字符串的类
常量不可改变
由final修饰 不能被继承
String类的底层是:以前是char java9后 变成byte数组 减少空间
常量池:
由于String类型描述的字符串内容是常量不可变的,因此java虚拟机将首次出现的字符串放入常量池中,若后续代码中出现了相同字符串内容则直接使用池中已有的字符串对象而无需申请内存及创建对象,提高了性能
考:创建很多的对象一会new 一会不new 有什么区别?equals和==程序的结构
常用的构造方法
String()
String(byte[] bytes,int offset,int length)
String(byte[] bytes)
String(char[] value,int offset,int length)
String(char[] value)
String(String original)
如何实现byte数组转向String类型转换 ---> 调用构造方法
char 一样调用构造方法
成员方法
String toString();
byte[] getBytes();
char toCharArray();
char charAt(int index);
int length();
boolean isEmpty();
int compareTo(String anotherString);
int compareToIgnoreCase(String str);
String concat(String str);
boolean contains(CharSequence s);
String toLowerCase();
String toUpperCase();
String trim();
boolean startsWith(String suffix);
boolean equals(Object anObject);
int hashCode();
boolean equalsIgnoreCase(String anotherString);
int indexOf(int ch);
int indexOf(int ch,int fromIndex);
int indexOf(String str);
int indexOf(String str,int fromIndex);
int lastIndexOf(int ch);
int lastIndexOf(int ch,int fromIndex);
int lastIndexOf(String str);
int lastIndexOf(String str,int fromIndex);
String subString(int beginIndex,int endIndex);
String subString(int beginIndex)
正则表达式:
概念:正则表达式本质就是一个“规则字符串”,可以用于对字符串数据的格式进行验证,以及匹配、查找、替换等操作。该字符串通常使用^运算符作为开头标志,使用$运算符作为结尾标志,当然也可以省略
规则:
相关的方法:切割split 替换replace
正则表达式有什么用?
可以实现字符串数据的格式进行验证校验
经验:多查API基本上用到查上三次以上,就能记住
可变字符串类
可变字符串类:StringBuilder StringBuffer
其中 String StringBuilder StringBuffer 有什么区别?
String表示不可改变
StringBuilder StrIngBuffer 表示可变字符串类
java.lang.StringBuffer java.lang.StringBuilder
1.0开始 线程安全效率低 1.5开始 非线程安全效率高
构造方法
StringBuilder();
StringBUilder(int capacity);
StringBUilder(String str);
其中默认容量为16+
常用的成员方法
int capacity();
int length();
//增删改查
StringBuilder insert(int offset,String str);
StringBuilder append(String str);
StringBuilder deleteCharAt(int index);
StringBuilder delete(int start,int end);
StringBuilder replace(int start,int end,String str);
String reverse();
大部分返回类型是StringBuilder 有返回值是为了能够连续调用
如果放的数值超过了初始容量会自动扩容 默认扩容量为: *2+2
日期相关类
java8之前的
System类:static long currentTimeMillis()
Date类(过时):构造date()和date(long date) Long类型的long getTime() void setTime(longtime)
SimpleDateFormat类:格式化SimpleDateFormat(String pattern)
Calendar类:可以按照指定的年月日时分秒构造对象,可以实现全球化,而且date过时的方法进行弥补
*重中之重:多台的使用场合
通过方法的参数传递形成多态
在方法体中直接使用多态的语法格式
通过方法的返回值类型形成多态
Java8中的日期相关类
更加专业,把java8之前的不足进行弥补
LocalDate类:主要描述日期信息
LocalTime类:主要描述时间信息
LocalDateTime类:主要描述日期时间信息
Instant类:描述瞬间的
DateTimeFormatter类:调整格式的
核心类库(重点)
集合的概述:
1.当需要在Java程序中记录单个数据内容时,则声明一个变量
2.当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。
3.当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。
4.当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。
5.当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合。
集合的框架:
java.util.Collection集合 和 java.util.Map集合。
Collection集合的常用方法:
增删改查
boolean add(E e);
boolean addAll(Collection<? extend E> 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();
Iterator接口
描述迭代器对象的
常用的方法
boolean hashNext();
E next();
void remove();
foreach循环
List集合
Collection的子类
特点:允许有重复的元素,元素存放有先后顺序
四种 ArrayList 查询方便 修改不方便
LinkedList 查询不方便 修改方便
Stack 栈
Vector(过时) 线程安全 效率低
常用的方法:
void add(int index, E element);
boolean addAll(int index, Collection<? extend 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)
Queue集合
先进先出的队列
选择LinkedList 是因为进行增删比较方便
方法:
boolean offer(E e);
E poll();
E peek();
笔试:利用两个栈实现一个队列
泛型机制
基本概念:通常情况下集合中可以存放不同类型的对象,是因为将所有对象都看做Object类型放入的,因此从集合中取出元素时也是Object类型,为了表达该元素真实的数据类型,则需要强制类型转换,而强制类型转换可能会引发类型转换异常。
底层原理:
泛型的本质就是参数化类型
通配符
- <?> 无限制通配符:表示我们可以传入任意类型的参数。
- <? extends E> 表示类型的上界是E,只能是E或者是E的子类。
<? super E> 表示类型的下界是E,只能是E或者是E的父类。
set集合
java.util.Set集合是Collection集合的子集合,与List集合平级。
该集合中元素没有先后放入次序,且不允许重复。
该集合的主要实现类是:HashSet类 和 TreeSet类以及LinkedHashSet类。
其中HashSet类的底层是采用哈希表进行数据管理的。
其中TreeSet类的底层是采用红黑树进行数据管理的。
其中LinkedHashSet类与HashSet类的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。元素放入HashSet集合的原理
使用元素调用hashCode方法获取对应的哈希码值,再由某种哈希算法计算出该元素在数组中的索引位置。
- 若该位置没有元素,则将该元素直接放入即可。
- 若该位置有元素,则使用新元素与已有元素依次比较哈希值,若哈希值不相同,则将该元素直接放入。
- 若新元素与已有元素的哈希值相同,则使用新元素调用equals方法与已有元素依次比较。
- 若相等则添加元素失败,否则将元素直接放入即可。
- 思考:为什么要求重写equals方法后要重写hashCode方法呢?
解析:
当两个元素调用equals方法相等时证明这两个元素相同,重写hashCode方法后保证这两个元
素得到的哈希码值相同,由同一个哈希算法生成的索引位置相同,此时只需要与该索引位置已有元素比较即可,从而提高效率并避免重复元素的出现。
TreeSet集合的概念
- 由于TreeSet集合的底层采用红黑树进行数据的管理,当有新元素插入到TreeSet集合时,需要使用新元素与集合中已有的元素依次比较来确定新元素的合理位置。
- 比较元素大小的规则有两种方式:
使用元素的自然排序规则进行比较并排序,让元素类型实现java.lang.Comparable接口;
使用比较器规则进行比较并排序,构造TreeSet集合时传入java.util.Comparator接口;
自然排序的规则比较单一,而比较器的规则比较多元化,而且比较器优先于自然排序;
Map集合(重点)
java.util.Map
集合中存取元素的基本单位是:单对元素,其中类型参数如下: - K - 此映射所维护的键(Key)的类型,相当于目录。
- V - 映射值(Value)的类型,相当于内容。
- 该集合的主要实现类有:HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、Properties类。
```java
常用方法:
V put(K key,V value);
V get(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
V remove(Object key);
Set keySet();
Collection values();
Set
> entrySet();
<a name="t8qds"></a>
## 元素放入HashMap集合的原理
- 使用元素的key调用hashCode方法获取对应的哈希码值,再由某种哈希算法计算在数组中的索引位置。
- 若该位置没有元素,则将该键值对直接放入即可。
- 若该位置有元素,则使用key与已有元素依次比较哈希值,若哈希值不相同,则将该元素直接放入。
- 若key与已有元素的哈希值相同,则使用key调用equals方法与已有元素依次比较。
- 若相等则将对应的value修改,否则将键值对直接放入即可。
<a name="nN8cD"></a>
# Collections类
```java
工具类