你最愿意做的哪件事,才是你的天赋所在

0%

java学习之路2-数组

数组

java的数组与c++的不同
java的数组需要在堆中申请内存

int[] a = new int[10];

一维数组与Arrays

Arrays是java的一个类,里面的函数能够对数组进行处理,一共有以下几个函数

toString

String toString (type[] a)
作用:把a数组中的全部元素转换成为字符串,中间用“,”隔开

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[] a = new int[10];
int k;
k=in.nextInt();
for(int i=0;i<k;i++)a[i]=in.nextInt();
String b=Arrays.toString(a);
System.out.printf(b);
in.close();
}
}

输入:
5
1 2 3 4 5
输出:
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

copyOf

type copyOf(type[] a,int lenth)
作用:拷贝a数组的前lenth个元素,创建一个新的数组
type copyOf(type[] a,int star,int end)
作用:拷贝a数组的下标为star到坐标end的元素作为新数组,返回一个数组元素。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[] a = new int[10];
int k;
k=in.nextInt();
for(int i=0;i<k;i++)a[i]=in.nextInt();
int[] b=Arrays.copyOf(a,4);
String s = Arrays.toString(b);
System.out.printf(s);
in.close();
}
}

输入:
5
1 2 3 4 5
输出:
[1, 2, 3, 4]

sort

void sort(type[] a)
采用快速排序对a数组进行从小到大的排序,时间复杂度为nlgn

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[] a = new int[10];
int k;
k=in.nextInt();
for(int i=0;i<k;i++)a[i]=in.nextInt();
Arrays.sort(a);
String s = Arrays.toString(a);
System.out.printf(s);
in.close();
}
}

输入:
10
10 9 8 7 6 5 4 2 1 3
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

binarySerach

int binarySerach(type[] a,int start,int end,type v)
采用二分查到的形式查询值v,通常需要先对a数组进行排序,如果存在v,则返回该下标,否则返回负数值。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[] a = new int[10];
int k = in.nextInt();
for(int i=0;i<10;i++)a[i]=10-i;
int pos = Arrays.binarySearch(a,0,10,k);
System.out.printf("%d",pos);
in.close();
}
}

输入:
6
0
输出:
4
-1

fill

void fill(type[] a,type v)
作用:将数组所有数据元素设置为v,与c++相同

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[] a = new int[10];
Arrays.fill(a,10);
String s = Arrays.toString(a);
System.out.printf(s);
in.close();
}
}

输出:
[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]

equals

boolean equals(type[] a,type[] b)
作用:如果两个数组的大小相同并且下标相同对应的元素相等,则返回true,否则,返回false;

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[] a = new int[10];
int[] b= new int[10];
Arrays.fill(a,10);
Arrays.fill(b,10);
System.out.print(Arrays.equals(a, b));
in.close();
}
}

输出:
true

二维数组

java的二维数组可以有不规则形式,这样避免了浪费内存的情况。

声明与初始化

声明

int[][] arr;
与一维数组一样,在未初始化之前,无法使用这个数组

初始化

arr = new int[10][10];

不规则数组

java中不存在多维数组,实际上就是一维数组中的一个元素也是一个数组。
所以每个单独的元素是一个单独的数组,这样每个元素的数组大小就能不一样了。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;
public class singlearray
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int[][] arr =new int[6][];
for(int i=0;i<6;i++)
arr[i]=new int[i+1];
for(int i=0;i<6;i++)
{
for(int j=0;j<arr[i].length;j++)
{
arr[i][j]=j;
}
}
System.out.print(Arrays.deepToString(arr));
in.close();
}
}

输出:
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]]

-------------你最愿意做的哪件事才是你的天赋所在-------------