文章目录
一:认识数组
1.数组的默认初始化值
2.数组的内存结构
数组S放在常量池中,static放在静态域中
比如:
int arr=new int[] {
1,2,3};
arr放入栈内存中,new出来的放入堆中,并且对应。
3.数组的声明
package com.xzx.contact;
public class ArrayTest {
public static void main(String[] args) {
//1.一维数组的声明和初始化
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] ids;//声明 声明数组的类型
ids=new int[]{
1001,1002,1003,1004};//赋值
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names=new String[5];
//总结:数组一旦初始化完成,其长度就确定了
//2.如何调用数组的指定位置的元素:通过角标的方式调用
names[0]="张三";
names[1]="李四";
names[2]="李冰";
names[3]="李真";
names[4]="李永明";//charAt(0)是李
//3.如何获得数组的长度 属性:length
System.out.println(names.length);
//4.数组元素的默认初始化值
/*
数组元素是整型:0
数组元素是浮点型:0.0
数组元素是char型:0或'\u0000',而非'0'
数组元素是boolean型,false
*/
int[]arr=new int[1];
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}
二:二维数组的使用
1.二维数组的定义
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
//1.二维数组的声明和初始化
//要么给值要么就给大小,不能都写
//1.1 静态初始化
int[][] arr1=new int[][] {
{
1,2,3},{
4,5},{
6,7}};
//1.2动态初始化
String [][] arr2=new String[3][2];
String [][] arr3=new String[3][];
//2.如何调用数组的指定位置的元素
System.out.println(arr1[0][1]);
//3.获取数组的长度
System.out.println(arr1.length);
System.out.println(arr1[1].length);
//4.遍历二维数组
for(int i=0;i<arr1.length;i++) {
for(int j=0;j<arr1[i].length;j++) {
System.out.println(arr1[i][j]);
}
}
}
}
2.二维数组的默认初始化值
3.二维数组的内存解析
三:数组例题
1.获取arr数组所有元素和
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
int [][]arr=new int[][] {
{
3,5,8},{
12,9},{
7,0,6,4}};
int sum=0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
sum+=arr[i][j];
}
}
System.out.println(sum);
}
}
2.数组中涉及到的常见算法题
1:数组的最大值
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
int []arr=new int[10];
int maxValue=arr[0];
for(int i=0;i<arr.length;i++) {
arr[i]=(int)(Math.random()*(90)+10);
}
for(int i=1;i<arr.length;i++) {
if(arr[i]>maxValue) {
maxValue=arr[i];
}
}
System.out.println(maxValue);
}
}
2:数组的复制
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
String[] arr=new String[] {
"a","b","c","d"};
//数组的复制(区别于数组变量的赋值,arr1=arr)
String []arr1=new String[arr.length];
for(int i=0;i<arr1.length;i++) {
arr1[i]=arr[i];
}
}
}
3.数组的查找
1.线性查找
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
String dest="a";
boolean isFlag=true;
String[] arr=new String[] {
"a","b","c","d"};
for(int i=0;i<arr.length;i++) {
if(dest.equals(arr[i])) {
System.out.println("找到了指定的元素");
isFlag=false;
break;
}
}
if(isFlag) {
System.out.println("很遗憾,没有找到");
}
}
}
2.二分查找
前提:所要查找的数组必须有序
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
int[] arr = new int[] {
-55, -34, -30, -2, 1, 17, 25, 39 };
int dest = 1;// 目标数
int head = 0;// 初始的首索引
int end = arr.length - 1;// 初始的末索引
boolean isFlag = true;
while (head <= end) {
int middle = (head + end) / 2;
if (dest == arr[middle]) {
System.out.println("找到了,位置是" + middle);
isFlag = false;
break;
} else if (dest < arr[middle]) {
end = middle - 1;
} else {
head = middle + 1;
}
}
if (isFlag) {
System.out.println("很遗憾,没有找到");
}
}
}
4.数组的排序
1.冒泡排序
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
// 每轮能把最大的数排在最后面,所以减1
int[] arr = new int[] {
55, 100, 4, 0, -6, 70, 11, 5 };
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
四:Arrays工具类
package com.xzx.contact;
import java.util.Arrays;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
//1.判断数组相等
int []arr1=new int[] {
1,2,3,4};
int [] arr2=new int[] {
1,3,2,4};
boolean isEquals=Arrays.equals(arr1,arr2);
System.out.println(isEquals);
//2.输出数组信息
System.out.println(Arrays.toString(arr1));
//3.指定值填充到数组中 全替换成括号里的数
Arrays.fill(arr1, 10);
System.out.println(Arrays.toString(arr1));
//4.排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//5.二分查找 元素得有序
int []arr3=new int[] {
-1,0,1,5,10,100};
int index=Arrays.binarySearch(arr3,0);
if(index>0) {
System.out.println(index);
}else {
System.out.println("未找到");
}
}
}
五:数组中的常见异常
六:自定义数组的工具类
简单举例:代码不完整
工具class ArrayUtil.java
package com.xzx.contact;
public class ArrayUtil {
//求数组最大值
public int getMax(int [] arr) {
return 0;
}
//求数组最小值
public int getMin(int []arr) {
return 0;
}
//求数组的平均值
public int getAvg(int [] arr) {
return 0;
}
//反转数组
public void reverse(int[] arr) {
}
//复制数组
public int[] copy(int []arr) {
return null;
}
//数组排序
public void sort(int []arr) {
}
//遍历数组
public void print(int []arr) {
}
//查找指定元素
public int getIndex(int []arr,int dest) {
return 0;
}
}
ArrayTest.java
package com.xzx.contact;
@SuppressWarnings("unused")
public class ArrayTest {
public static void main(String[] args) {
ArrayUtil util=new ArrayUtil();
int[] arr=new int[] {
1,2,3,4,5,6,7};
int max=util.getMax(arr);
}
}