Java的api文档:https://www.runoob.com/manual/jdk11api/java.base/java/util/package-summary.html
数组
数组声明
int[] arr2 = new int[5];//推荐这种
int arr[] = new int[5];
数组初始化
int arr[] = new int[]{
1, 3, 5, 7, 9};
int[] arr2 = {
2, 4, 6, 8, 10};
添加元素以及取出元素
int[] arr = new int[5];
arr[0] = 1;
int a = arr[0];
遍历数组
public static void main(String[] args) {
int arr[] = new int[]{
1, 3, 5, 7 ,9};
int[] arr2 = {
2, 4, 6, 8, 10};
for (int i = 0; i < arr.length; ++i) {
System.out.print(arr[i] + "\t"); // 1 3 5 7 9
}
for (int x: arr2) {
System.out.print(x + "\t"); // 2 4 6 8 10
}
}
Arrays工具类的常用操作
方法 | 功能 | 备注 |
---|---|---|
fill(int[] a, int val) | 填充数组 | |
fill(int[] a, int fromIndex, int toIndex, int val) | 填充指定索引区间数组 | 左闭右开 |
sort(int[] a) | 数组排序 | |
sort(int[] a, int fromIndex, int toIndex) | 排序指定索引的元素 | |
copyOf(int[] original, int newLength) | 复制数组 | 指定新数组长度 |
copyOfRange(int[] original, int from, int to) | 复制数组 | 指定所复制的原数组的索引 |
Arrays.asList(stringArray).contains(“a”); | 检查数组中是否包含某一个值 | |
Arrays.binarySearch(str) | 定位元素位置 | 前提是有序数组有序数组 |
Arrays.asList.indexOf(str); | 定位元素位置 |
ArrayUtils工具类的常用操作
方法 | 功能 | 备注 |
---|---|---|
ArrayUtils.addAll(intArray, intArray2); | 连接两个数组 | |
ArrayUtils.reverse(intArray); | 数组翻转 | |
ArrayUtils.removeElement(intArray, 3) | 从数组中移除一个元素 | 返回一个删除后的新数组 |
字符串
String是不可变类型,被final修饰,即赋值后不能被修改
字符串的格式化
String fs = String.format(
"浮点型变量的值为%f," +
"整型变量的值为%d," +
"字符串变量的值为%s"
, floatVar, intVar, stringVar);
String类常用操作
方法 | 功能 | 备注 |
---|---|---|
charAt(int index) | 返回指定索引处的 char 值。 | |
contains() | 判断是否包含指定的字符 | |
endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 | |
equals(Object anObject) | 将此字符串与指定的对象比较。 | |
equalsIgnoreCase(String anotherString) | 两个String 比较,不考虑大小写。 | |
indexOf(String str) | 返回子串在此字符串中第一次出现处的索引。 | |
lastIndexOf(int ch) | 返回字符最后一次出现处的索引。 | |
int length() | 返回此字符串的长度。 | |
replace(char oldChar, char newChar) | 替换子串 | 返回一个新的字符串 |
split(String regex) | 字符串分割 | |
substring(int beginIndex,int endIndex) | 字符串切片 | 返回一个新的字符串 |
toLowerCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 | |
toUpperCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 | |
trim() | 删除字符串左右空元素 | 返回字符串的副本 |
isEmpty() | 判断字符串是否为空。 |
集合框架
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
Java集合框架图
Java集合框架体系图
ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。
初始化
import java.util.ArrayList; // 引入 ArrayList 类
ArrayList<E> objectName =new ArrayList<>(); // 初始化
ArrayList类常用操作
方法 | 功能 | 备注 |
---|---|---|
add() | 将元素插入到指定位置的 arraylist 中 |
|
addAll() | 添加集合中的所有元素到 arraylist 中 | |
clear() | 删除 arraylist 中的所有元素 | |
clone() | 复制一份 arraylist | |
contains() | 判断元素是否在 arraylist |
|
get() | 通过索引值获取 arraylist 中的元素 |
|
indexOf() | 返回 arraylist 中元素的索引值 |
|
removeAll() | 删除存在于指定集合中的 arraylist 里的所有元素 | |
remove() | 删除 arraylist 里的单个元素 |
|
size() | 返回 arraylist 里元素数量 | |
isEmpty() | 判断 arraylist 是否为空 | |
subList() | 截取部分 arraylist 的元素 | 左开右闭 |
set(index,newValue) | 更新指定索引的元素 |
|
sort() | 对 arraylist 元素进行排序 |
默认为升序排列 |
toArray() | 将 arraylist 转换为数组 | |
lastIndexOf() | 返回指定元素在 arraylist 中最后一次出现的位置 | |
retainAll() | 保留 arraylist 中在指定集合中也存在的那些元素 | |
containsAll() | 查看 arraylist 是否包含指定集合中的所有元素 | |
forEach() | 遍历 arraylist 中每一个元素并执行特定操作 |
LinkedList
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
链表可分为单向链表和双向链表。
LinkedList 继承了 AbstractSequentialList 类。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
LinkedList常用操作
方法 | 描述 | 备注 |
---|---|---|
add(E e) |
末尾添加元素 | 返回布尔值 |
add(int index, E element) | 向指定位置插入元素。 | 返回布尔值 |
addFirst(E e) |
元素添加到头部。 | |
addLast(E e) |
元素添加到尾部。 | |
get(int index) | 返回指定位置的元素。 | |
getFirst() |
返回第一个元素。 | |
getLast() |
返回最后一个元素。 | |
remove() | 删除并返回第一个元素。 | |
removeFirst() |
删除并返回第一个元素。 | |
removeLast() |
删除并返回最后一个元素。 | |
remove(Object o) | 删除某一元素 | 返回布尔值 |
remove(int index) | 删除指定位置的元素。 | |
set(int index, E element) |
设置指定位置的元素。 | |
contains(Object o) |
判断是否含有某一元素。 | |
indexOf(Object o) |
查找指定元素从前往后第一次出现的索引。 | |
lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 | |
clear() | 清空链表。 | |
size() | 返回链表元素个数。 | |
addAll(Collection c) | 将一个集合的所有元素添加到链表后面 | 返回布尔值 |
addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面 | 返回布尔值 |
ArrayList与LinkedList的抉择
ArrayList :是顺序结构,查找和修改速度快,就像电影票
LinkedList :是链表结构,增加和删除速度快,就像佛珠
HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合
HashSet 允许有 null 值
HashSet 是无序的,即不会记录插入的顺序
HashSet 不是线程安全的
HashSet 实现了 Set 接口
HashSet类常用方法
方法 | 描述 |
---|---|
add() | 添加元素 |
remove(value) | 删除元素 |
contoins(value) | 判断是否存在元素 |
size() | 得到元素个数 |
for-each | 迭代 |
HashSet、LinkedHashSet、TreeSet的抉择
HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序
HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
HashMap类常用操作
方法 | 功能 |
---|---|
put() | 将键/值对添加到 hashMap 中 |
get() | 获取指定 key 对应对 value |
getOrDefault() | 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值 |
remove() | 删除指定键 key 的映射关系 |
containsKey() | 是否存在指定的 key |
keySet | 返回 hashMap 中所有 key 组成的集合视图。 |
values() | 返回 hashMap 中存在的所有 value 值。 |
isEmpty() | 判断 hashMap 是否为空 |
size() | 计算 hashMap 中键/值对的数量 |
forEach() | 对 hashMap 中的每个映射执行指定的操作。 |
containsValue() | 检查 hashMap 中是否存在指定的 value 对应的映射关系。 |
HashMap与Hashtable的抉择
HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
区别1:
- HashMap可以存放 null
- Hashtable不能存放null
区别2:
- HashMap不是线程安全的类
- Hashtable是线程安全的类
Collections工具类
Collections是一个类,由静态方法组成,是针对集合框架,容器的工具类,就如同Arrays是数组的工具类
方法 | 功能 |
---|---|
reverse() | 反转 |
shuffle() | 随机打乱 |
sort() | 升序排序 |
swap() | 交换 |
synchronizedList() | 线程安全化 |
自然排序的使用
retuen的结果会有什么影响:
- return 负数----表示后面的比前面的小,后来的元素放在前面
- return 0----表示两个是同一个元素
- return 正数----表示后面的比前面的大,后来的元素放在后面
自定义排序的口诀:
升序this在前----降序this在后
方法:类去实现Comparable
接口,重写compareTo
方法
public class Student implements Comparable<Student> {
int uid;
int score;
public Student(int uid, int score) {
this.uid = uid;
this.score = score;
}
@Override
public int compareTo(Student student) {
// 升序this在前----降序this在后
return this.score-student.score;
}
public static void main(String[] args) {
TreeSet<Student> studentHashSet = new TreeSet<>();
studentHashSet.add(new Student(1,11));
studentHashSet.add(new Student(5,6));
studentHashSet.add(new Student(7,13));
studentHashSet.add(new Student(2,17));
studentHashSet.add(new Student(6,9));
for (Student student : studentHashSet) {
System.out.println(student.uid+":"+student.score);
}
}
}
自定义排序方法:比较器排序Comparator
使用comparator接口对ArrayList排序无效
public class Student {
int uid;
int score;
public Student(int uid, int score) {
this.uid = uid;
this.score = score;
}
public static void main(String[] args) {
TreeSet<Student> studentHashSet = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student student1,Student student2) {
//升序前减后,降序后减前
return student1.score-student2.score;
}
});
studentHashSet.add(new Student(1,11));
studentHashSet.add(new Student(5,6));
studentHashSet.add(new Student(7,13));
studentHashSet.add(new Student(2,17));
studentHashSet.add(new Student(6,9));
for (Student student : studentHashSet) {
System.out.println(student.uid+":"+student.score);
}
}
}
Comparable与Comparator的对比
Comparable是通过放置的对象去实现Comparable接口的compareTo
方法,升序this在前,降序this在后
Comparator是通过创建的集合去实现匿名内部类,升序前减后,降序后减前
哈希值与哈希表
哈希值是JDK根据对象的地址
或者字符串
或者数字
算出来的int类型的数值,可以通过对象的hashCode()
方法获取,默认情况下不同对象的哈希值是不同的,重写hashCode()方法后可以让不同对象拥有相同哈希值