数组的基本操作
- 注意Arrays的fill、toString、sort、copyOf、binarySearch.
import java.util.Arrays;
public class ArrDemo {
public static void main(String[] args) {
//动态初始化
int[] a = new int[5]; //元素为初始值
// int a[] = new int[5]; //非传统java
//静态初始化
int[] b = {5, 3, 2, 4, 1};
// int[] b = new int[]{1, 2, 3, 4, 5}; //时代的弃子
int[] c = {1, 2, 3 ,4, 5,}; //java1.8后可用
//数组长度用length访问
for (int i = 0; i < c.length; ++i){
System.out.print(c[i] + " ");
}
System.out.println();
//二维数组初始化
int[][] d = new int[2][]; //两个空指针的数组
int[][] e = new int[2][3]; //有元素默认初始值
int[][] f = {{1, 2 ,3}, {4, 5, 6}};
//打印数组
System.out.println(Arrays.toString(e[0]));
//全元素赋值
Arrays.fill(a, 99);
System.out.println(Arrays.toString(a));
//指定元素赋值,范围左闭右开
Arrays.fill(a, 1, 3, -1);
System.out.println(Arrays.toString(a));
//自然排序(从小到大)
int[] a2 = {3, 2, 1, 4, 5};
Arrays.sort(a2);
System.out.println(Arrays.toString(a2));
String[] a3 = {"d", "c", "a", "b", "f"};
Arrays.sort(a3);
System.out.println(Arrays.toString(a3));
//二分查找
//有序数组
int index = Arrays.binarySearch(a2, 3);
System.out.println(index);
//无序数组,未经自然排序
index = Arrays.binarySearch(b, 3);
System.out.println(index);
//复制数组-扩容部分补默认值
int[] a4 = Arrays.copyOf(a2, a2.length+2);
System.out.println(Arrays.toString(a4));
}
}
- 集合用size()方法
- 字符串用length()方法
- 数组用length变量
排序法
冒泡排序
public class Bubble {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
for (int i = 0; i < a.length-1; ++i){
for (int j = 0; j < a.length-1-i; ++j){
if(a[j] < a[j+1]){
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
//输出结果
for(int x: a){
System.out.print(x + " ");
}
}
}
选择排序
public class Select {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
for(int i = 0; i < a.length-1; ++i){
int k = i;
for (int j = i+1; j < a.length; ++j){
if(a[j] > a[k]){
k = j;
}
}
int t = a[k];
a[k] = a[i];
a[i] = t;
}
System.out.println(Arrays.toString(a));
}
}
插入排序
基于交换实现
public class Insert {
public static void main(String[] args) {
int[] b = {1, 2, 3, 4, 5};
//i号及以前的元素是已经排好序的
for (int i = 0; i < b.length-1; i++) {
//将i+1号安置到前面的有序子序列中
for (int j = i+1; j > 0; j--) {
if (b[j] > b[j-1]) {
int temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}else {
break;
}
}
}
System.out.println(Arrays.toString(b));
}
}
基于移位实现
public class Insert {
public static void main(String[] args) {
int[] b = {1, 2, 3, 4, 5};
//i号及以前的元素是已经排好序的
for (int i = 0; i < b.length-1; i++) {
//将i+1号安置到前面的有序子序列中
int t = b[i+1];
for (int j = i; j >= 0; j--) {
if (t > b[j]) {
b[j+1] = b[j];
if(j == 0){
b[0] = t;
}
}else
{
b[j+1] = t;
break;
}
}
}
System.out.println(Arrays.toString(b));
}
}