数组定义及初始化
- 一维数组
a.相同数据类型集合
b.开辟一块连续内存空间(JVM:)
new:在堆上进行开辟
//一维数组定义
int[] arr = {1,2,3};
int[] arr = new int[]{1,2,3};
int[] arr = new int[10];(存放默认值0)
- 二维数组
//二维数组定义
int[][] brr = {{1,2,3,4,},{5,6,7,8}};(两行四列)
int[][] brr = new int[][]{{1,2,3,4},{5,6,7,8}};
int[][] brr = new int[2][4];(类型默认值)
//其中,brr[0].length -> 列数,brr.length -> 行数
//二维数组访问形式 brr[1][2] -> 第二行第三列
一维数组遍历(打印)
- for循环
for(int i = 0;i<arr.length;i++){
//arr[i];
}
- foreach语句 (迭代器)
for(int value:arr){
//value
}
- 打印数组
System.out.println(Arrays.toString(arr));
拷贝
- for循环拷贝
int[] arr={1,2,3};//原始数据
int[] brr=new int[arr.length];
for(int i=0;i<arr.length;i++){
brr[i]=arr[i];
}
- int[] brr = Arrays.copyOf(arr,arr.length);
- int[] brr = arr.clone();
- int[] brr = new int[arr.length];
System.arraycopy(arr,0,brr,0,arr.length);
扩容
arr = Arrays.copyOf(arr,arr.length+1);
一维数组的增删查找操作
- 在给定的数组中插入一个元素
import java.util.Arrays;
public class Demo{
public static int[] insertValue(int[] arr,int value) {
if (arr == null) {
return null;
}
//扩容操作
int[] brr = new int[arr.length + 1];
//将原始数据进行拷贝
for (int i = 0; i < arr.length; i++) {
brr[i] = arr[i];
}
arr = brr;
int i = brr.length - 1 - 1;
//移动数据
for (; i >= 0 && arr[i] > value; i--) {
arr[i + 1] = arr[i];
}
arr[i + 1] = value;
return arr;
}
public static void main(String[] args) {
int[] arr = {1,2,4,6};
arr = insertValue(arr,-2);
System.out.println(Arrays.toString(arr));
}
}
- 在数组头部插入一个元素
时间复杂度:O(n)
import java.util.Arrays;
public class Demo{
public static int[] insertHead(int[] arr,int value){
if(arr==null){//参数安全检查
return null;
}
int srcLength = arr.length;//原始数据大小
arr = Arrays.copyOf(arr,arr.length+1);//扩容
for(int i = srcLength-1;i>=0;i--){
arr[i+1]=arr[i];
}
arr[0]=value;
return arr;
}
public static void main(String[] args) {
int[] arr = {1,2,4,6};
arr = insertHead(arr,9);
System.out.println(Arrays.toString(arr));
}
}
- 在数组尾部插入一个元素
import java.util.Arrays;
public class Demo{
public static int[] insertTail(int[] arr,int value){
if(arr==null){//参数安全检查
return null;
}
int srcLength = arr.length;//原始数据大小
arr = Arrays.copyOf(arr,arr.length+1);//扩容
arr[srcLength]=value;
return arr;
}
public static void main(String[] args) {
int[] arr = {1,2,4,6};
arr = insertTail(arr,-1);
System.out.println(Arrays.toString(arr));
}
}
- 在数组指定下标插入一个元素
import java.util.Arrays;
public class Demo{
public static int[] insertIndex(int[] arr, int index,int value){
if(arr==null||index<0||index>=arr.length){//参数安全检查
return null;
}
int srcLength = arr.length;//原始数据大小
arr = Arrays.copyOf(arr,arr.length+1);//扩容
for(int i =srcLength-1;i>=index;i--){
arr[i+1] = arr[i];
}
arr[index]=value;
return arr;
}
public static void main(String[] args) {
int[] arr = {1,2,4,6};
arr = insertIndex(arr,2,99);
System.out.println(Arrays.toString(arr));
}
}
- 查找并删除数组中指定元素
import java.util.Arrays;
public class Demo{
public static int[] removeValue(int[] arr, int value){
if(arr==null){//参数安全检查
return null;
}
int index = search(arr,value);//查找当前value在index
int count = 0;//统计当前待删元素个数
while (arr[arr.length-1]==value){
arr = Arrays.copyOf(arr,arr.length-1);
}
while (index!=-1){
for(int i=index;i<arr.length-1;i++){
arr[i]=arr[i+1];
}
count++;
index = search(arr,value);
}
arr = Arrays.copyOf(arr,arr.length-count);
return arr;
}
public static int search(int[] arr, int value) {//返回下标
if(arr==null){
return -1;
}
for (int i=0;i<arr.length;i++){
if(arr[i]==value){
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {2,2,3,1,2,4,2,8,2,2};
arr = removeValue(arr,2);
System.out.println(Arrays.toString(arr));
}
}
6.两数之和(求数组中和为目标值的两个数,将其输出为数组形式);
import java.util.Arrays;
public class Demo1 {
public static int[] getSum(int[] sums,int target){
int i = 0,j = 0;
loop: for(;i < sums.length;i++){
if(target-sums[i]>=0){
for (j=0;j<sums.length;j++){
if(sums[j]+sums[i]==target&&i!=j){
break loop;
}
}
}
}
int[] arr = {sums[i],sums[j]};
return arr;
}
public static void main(String[] args) {
int[] sums = {7,2,1,3,18};
int[] arr = getSum(sums,3);
System.out.println(Arrays.toString(arr));
}
}
二维数组实例—打印杨辉三角
public static void YangHuiTriangle(int n){//给定需要输出的行数
int[][] brr = new int[n][n];
brr[0][0] = brr[1][0] = brr[1][1] = 1;//前两行赋值
for(int i = 2;i < n;i++){
brr[i][0] = brr[i][i] = 1;//第 3行开始首尾为 1
for(int j = 1;j < i;j++){
brr[i][j] = brr[i-1][j-1] + brr[i-1][j];//每行中间部分赋值
}
}
for(int i = 0;i < n;i++){//按行依次打印
for(int j = 0;j < n-i-1;j++){//i前面各位置输出空格
System.out.print(" ");
}
for(int j = 0;j<=i;j++) {//输出其他位置的数
System.out.print(brr[i][j]+" ");
}
System.out.println();//每行结束换行
}
}
打印结果: