首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:String 类
1.1 概述
1.2 字面量的定义方式
1.3 String 的特点
1.4 String 的内存示意图
1.5 构造 String 对象
1.6 字符串拼接问题
1.7 字符串对象的比较
1.8 空字符串的比较
1.9 字符串的常用方法
1.10 常见正则表达式
第二章:StringBuilder 类
2.1 概述
2.2 常用方法
第三章:系统相关类
3.1 System 类
3.2 Runtime 类
第四章:数学相关的类
4.1 Math 类
4.2 大数运算类
第五章:数组的相关操作
5.1 数组的算法升华
5.2 数组工具类
第六章:日期时间API
6.1.1 概述
6.1.2 本地日期时间
6.2.3 指定时区日期时间 ZonedDateTime
6.2.4 持续日期/时间 Period 和 Duration
6.2.5 日期时间格式化 DateTimeFormat
第七章:字符编码的发展
7.1 ASCII 码
7.2 OEM 字符集的诞生
7.3 多字节字符集(MBCS)和中文字符集
7.4 ANSI 标准、国家标准以及 ISO 标准
7.5 Unicode 的出现
当前位置:
首页>>
技术小册>>
Java语言基础9-常用API和常见算法
小册名称:Java语言基础9-常用API和常见算法
- java.util.Arrays 数组工具类,提供了很多静态方法来对数组进行操作,而且如下的每一个方法都有重载,以下只列出 int[] 类型的,其他类型依次类推: 二分查找法:要求数组有序,在数组中查找 key 是否存在,如果存在返回第一次找到的下标,不存在返回负数 ``` public static int binarySearch(int[] a, int key) {} ``` 根据 original 原数组复制一个长度为 newLength 的新数组,并返回新数组: ``` public static int[] copyOf(int[] original, int newLength) {} ``` 复制 original 原数组的 [from,to) 构成新数组,并返回新数组: ``` public static int[] copyOfRange(int[] original, int from, int to){} ``` 比较两个数组的长度、元素是否完全相同: ``` public static boolean equals(int[] a, int[] a2) {} ``` 用 val 填充整个 a 数组: ``` public static void fill(int[] a, int val) {} ``` 将 a 数组 [fromIndex,toIndex) 部分填充为 val : ``` public static void fill(int[] a, int fromIndex, int toIndex, int val){} ``` 将 a 数组按照从小到大进行排序: ``` public static void sort(int[] a) {} ``` 将 a 数组的 [fromIndex, toIndex) 部分按照升序排列: ``` public static void sort(int[] a, int fromIndex, int toIndex){} ``` 把 a 数组的元素,拼接为一个字符串,形式为:[元素1,元素2,元素3。。。] ``` public static String toString(int[] a) {} ``` 示例: ``` package com.github.array.demo13; import java.util.Arrays; import java.util.Random; /** * @author maxiaoke.com * @version 1.0 * */ public class Test { public static void main(String[] args) { int[] arr = new int[5]; // 打印数组,输出地址值 System.out.println(arr); // [I@1540e19d // 数组内容转换为字符串 System.out.println("arr数组的初始状态:" + Arrays.toString(arr)); // [0, 0, 0, 0, 0] // 向数组中填充数据 Arrays.fill(arr, 3); System.out.println("arr数组的现在状态:" + Arrays.toString(arr)); // [3, 3, 3, 3, 3] // 向数组中赋值100以内的随机数 Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100); } System.out.println("arr数组的现在状态:" + Arrays.toString(arr)); // [3, 19, 72, 81, 66] // 根据original原数组复制一个长度为newLength的新数组,并返回新数组 int[] arr2 = Arrays.copyOf(arr, 10); System.out.println("新数组:" + Arrays.toString(arr2)); // [93, 62, 31, 90, 88, 0, 0, 0, 0, 0] // 两个数组比较 System.out.println(Arrays.equals(arr, arr2)); // false // 数组排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // [17, 23, 32, 57, 98] } } ``` 示例:使用数组工具类实现动态数组 ``` package com.github.array; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.Iterator; /** * 动态数组 * * @author maxiaoke.com * @version 1.0 */ public class MyArrayList<E> implements Iterable<E> { /** * 底层存储的数据的容器 */ private Object[] all = new Object[5]; /** * 记录实际存储元素的个数 */ private int total; /** * 插入元素 * * @param e * @return */ public boolean add(E e) { // 判断是否要扩容 if (total >= all.length) { all = Arrays.copyOf(all, all.length + (all.length >> 1)); } all[total++] = e; return true; } /** * 插入指定位置的元素 * * @param index * @param e * @return */ public boolean add(int index, E e) { // 校验 index ,合理的范围是 [0,total] if (index < 0 || index > total) { throw new IndexOutOfBoundsException(index + "越界" + ",合理的范围是 [0," + total + "]"); } // 判断是否要扩容 if (total >= all.length) { all = Arrays.copyOf(all, all.length + (all.length >> 1)); } System.arraycopy(all, index, all, index + 1, total - index); all[index] = e; total++; return true; } /** * 删除某个位置上的元素:元素前移,最后一个元素位置[total-1]设置为 null * * @param index * @return */ public boolean remove(int index) { // 校验 index ,合理的范围是 [0,total-1] if (index < 0 || index >= total) { throw new IndexOutOfBoundsException(index + "越界" + ",合理的范围是 [0," + (total - 1) + "]"); } System.arraycopy(all, index + 1, all, index, total - index - 1); all[total - 1] = null; total--; return true; } @Test public void test() { MyArrayList<String> list = new MyArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); list.add("7"); for (String s : list) { System.out.println("s = " + s); } list.remove(1); for (String s : list) { System.out.println("s = " + s); } } @Override public Iterator<E> iterator() { return new Intr<>(); } private class Intr<E> implements Iterator<E> { private int cursor; // 默认指向第一个元素 @Override public boolean hasNext() { return cursor < total; } @Override public E next() { return (E) all[cursor++]; } } } ```
上一篇:
5.1 数组的算法升华
下一篇:
第六章:日期时间API
该分类下的相关小册推荐:
Java语言基础5-面向对象初级
深入拆解 Java 虚拟机
SpringBoot合辑-高级篇
Mybatis合辑5-注解、扩展、SQL构建
Java语言基础2-运算符
JAVA 函数式编程入门与实践
Java语言基础8-Java多线程
Java语言基础7-Java中的异常
Java语言基础12-网络编程
Java语言基础10-Java中的集合
Java必知必会-Maven高级
SpringBoot合辑-初级篇