1数组的排序
1.1.选择排序
- 从第一个位置元素到倒数第二个位置元素依次和后面每个元素作比较,依次得到每个位置上的最值。
package ArrayDemo;
import util.ArrayUtil;
public class ArrayDemo1 {
public static void main(String[] args) {
int[] arr = {10,5,40,3,20,16};
selectSort(arr, true);
ArrayUtil.printArr(arr);
}
public static void selectSort(int[] arr, boolean isAsc) {
// isAsc: true升序,false降序
for (int i=0;i<arr.length-1;i++) {
for (int j=i+1;j<arr.length;j++) {
if (isAsc?arr[i] > arr[j]:arr[i] < arr[j]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
}
1.2 冒泡排序
- 它重复走访要排序的数列,依次比较两个元素,如果他们顺序错误就把他们交换过来,走访数列的工作是重复地进行知道没有再需要交换,也就是说该数列已经完成。这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端,所以叫"冒泡排序"。
package ArrayDemo;
import util.ArrayUtil;
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr = {1,42,33,2,45,66};
bubbleSort(arr,false);
ArrayUtil.printArr(arr);
}
public static void bubbleSort(int[] arr, boolean isAsc ) {
for (int i=1;i<arr.length;i++) {
for (int j=0;j<arr.length-i;j++) {
if (isAsc?arr[j] > arr[j+1]:arr[j] < arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
}
1.3 二分查
public static int binarySearch(int[] arr, int key) {
int start = 0;
int end = arr.length-1;
while (start <=end) {
int middleIndex = (start + end) / 2;
int middle = arr[middleIndex];
if (key == middle) {
return middleIndex;
} else if (key > middle) {
start = middleIndex + 1;
} else {
end = middleIndex - 1;
}
}
return -1;
}
2.Arrays工具类用法
- 引包
import java.util.Arrays;
- toString 把数组转换字符串
int[] arr = {1,2,3,4,6};
System.out.println(Arrays.toString(arr));// [1, 2, 3, 4, 6]
- sort 排序
// 只能进行升序排序
Arrays.sort(arr);
- binarySearch: 找到数组数据索引
System.out.println(Arrays.binarySearch(arr, 3));
3.包装类
- 分别为:
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
- 装箱和拆箱:
- 装箱: 把基本数据类型转成包装类
- 拆箱:把包装类转成基本数据类型
// 示例
// 装箱
int a = 10;
Integer a2 = Integer.valueOf(a);
// 拆箱
int a3 = a2.intValue();
// 上述示例是jdk1.5之前书写方式,需要自己手动装箱拆箱
JDK1.5之后可以自动装箱和拆箱
int a = 10;
// 装箱
Integer a4 = a;
// 拆箱
int a5 = a4
- int如何转换String
int b = 100;
// 方式1:
Stirng s1 = b + "";
// 方式2:
String s2 = String.valueOf(b);
- String 转 int(sting转int 前提string是一个数)
String s3 = "100";
// 方式1:
// 返回值是Integer类型
Integer b = Integer.valueOf(s3);
// 方式2:
// 返回值是int类型
int b = Integer.parseInt(s3);
// 方式3:
Integer b = new Integer(s3);
- Integer中进制转换的方法
1.toBinaryString 转成二进制字符串
System.out.println(Integer.toBinaryString(100));
2.toOctalString 转成八进制字符串
System.out.println(Integer.toOctalString(100));
3.toHexString 转成16进制字符串
System.out.println(Integer.toHexString(100));
4. toString 转成几进制
System.out.println(Integer.toString(100,36));// 把100转换成36进制 范围(2-36进制)。超出36进制返回自己。
5.parseInt 其他进制转实际值
System.out.println(Integer.parseInt("abc",16));// 把16进制abc转成成10进制
- Character用法
1.isUpperCase 判断是否是大写字母
System.out.println(Character.isUpperCase('a'));
2.isLowerCase 判断是否是小写字母
System.out.println(Character.isLowerCase('d'));
3.isDigit 判断是否为数字
System.out.println(Character.isDigit('6'));
4.toUpperCase 字母转大写
System.out.println(Character.toUpperCase('a'));
5.toLowerCase 字母转小写
System.out.println(Character.toLowerCase('b'));
- Math方法
1. 常量值
Math.PI
Math.E
2. abs 求绝对值
System.out.println(Math.abs(-12));
3. ceil 向上取整
System.out.println(Math.ceil(15.3));
4. floor 向下取整
System.out.println(Math.floor(15.3));
5. pow(a,b) 求a的b次方
System.out.println(Math.pow(14,2));
6. random 求随机数0-1之间
System.out.println(Math.random());
7. round 四舍五入
System.out.println(Math.round(3.5));
8. sqrt 求算数平方根
System.out.println(Math.sqrt(16));// 4.0
- System类方法
1.gc 用于垃圾回收
2.exit 退出
3.currentTimeMillis 获取当前时间毫秒值 时间基准值:1970年1月1日0:0:0
System.out.println(System.currentTimeMillis());
4.nanoTime 获取当前时间纳秒值
5.arraycopy 数组拷贝
参数: src 源数组,srcPos 从哪拷贝,dest 拷贝到哪里,destPost 目标数组的位置, length 拷贝长度
int[] arr = {12,34,2,4,66,44,5};
int[] arr2 = new int[6];
// 从arr index为2位置开始拷贝,拷贝位置到arr2的index为1起始,拷贝3个长度
System.arraycopy(arr, 2, arr2, 1, 3);
ArrayUtil.printArr(arr2);// [0,2,4,66,0,0]
- Date类 日期
import java.util.Date;
Date d = new Date();
System.out.println(d);//Tue Oct 13 00:14:31 CST 2020
Date d2 = new Date(0);
System.out.println(d2);
// getTime 把日期对象转成毫秒值
// setTime 当前日期设置为毫秒值
d.getTime()
d.setTime(0)