目录
前言
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。具体的使用如以下几个方面。
一、数组的创建以及使用
1. 创建数组
Java语言使用new来创建数组。使用方法如下
import java.util.Arrays;
public class arraydemo {
public static void main(String[] args) {
long[] a;
//System.out.println(a);变量 'a' 可能尚未初始化
a=new long[10];
a[9]=1;
System.out.println(Arrays.toString(a));
long[] b={1,2,34,4,3,5,6,6};
System.out.println(Arrays.toString(b));
long[] c;
//c={1,23,3,4,5,6,7}; 此处不允许数组初始值设定项
c=new long[]{1,23,4,5,6,7,8};
System.out.println(Arrays.toString(c));
long[] d=c;
d[1]=2;
System.out.println(Arrays.toString(d));
}
}
2.数组的遍历
Java对于数组的遍历有了新的方法,它能在不使用下标的情况下遍历数组。使用方法如下:
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (double element: myList) {
System.out.println(element);
}
}
}
3.数组练习
3.1交换两个数
代码如下
public class SwapDemo {
private static void swap(double[] array, int a ,int b){
double t=array[a];
array[a]=array[b];
array[b]= t;
}
public static void main(String[] args) {
double a=1.0;
double b=100.0;
double[] array={a,b};
System.out.println(a);
System.out.println(b);
swap(array,0,1);
System.out.println(array[0]);
System.out.println(array[1]);
}
}
3.1冒泡排序
代码如下
public class BubbleSort {
private static void swap(long[] array,int a,int b){
long t=array[a];
array[a]=array[b];
array[b]= t;
}
public static void bubblesort(long[] array){
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
swap(array,j,j+1);
}
}
}
}
public static void main(String[] args) {
long[] a={9,3,7,8,5,4,3,2,8};
bubblesort(a);
for (long l : a) {
System.out.println(l);
}
}
}
3.2二分查找
代码如下
import java.util.Arrays;
public class BinarySearch {
public static int binarySearch(long[] array,long key){
int left=0,right= array.length-1;
while(left<=right){
int search=(left+right)/2;
if(array[search]<key){
left=search+1;
}
if(array[search]>key){
right=search-1;
}
if(array[search]==key){
return search;
}
}
return -1;
}
public static void main(String[] args) {
long[] array = {1, 4, 3, 2, 5, 7, 6, 9, 8, 1, 11, 10};
BubbleSort.bubblesort(array);
System.out.println(Arrays.toString(array));
System.out.println(binarySearch(array,5));
}
}
二、Arrays类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:
- 对数组排序:通过 sort 方法。
- 查找数组元素:通过binarySearch方法
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 填充数组:通过 fill 方法
- 拷贝数组:通过 copyOf 方法
- 转换成字符串:通过 toString 方法
具体的使用方法如下所示
import java.util.Arrays;
public class UseArray {
public static void main1(String[] args) {
long[] array={1,3,6,8,5,9,4};
Arrays.sort(array,1,5);
for (long l : array) {
System.out.println(l);
}
}
public static void main2(String[] args) {
long[] array={1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.binarySearch(array, 5));
}
public static void main3(String[] args) {
long[] array1={1,2,3,4,5,6,7,8,9,10};
long[] array2={1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.equals(array1, array2));
//如果使用==则是说明两边是否指向同一个对象
}
public static void main4(String[] args) {
long[] array={1,2,3,43,43,5,23};
Arrays.fill(array,5);
for (long l : array) {
System.out.println(l);
}
}
public static void main5(String[] args) {
long[] array={1,2,3,4,5,65,7,4,67};
long[] longs = Arrays.copyOf(array, 6);
for (long l : longs) {
System.out.println(l);
}
System.out.println("-----------------------------------------");
long[] longs1 = Arrays.copyOfRange(array, 2, 5);
for (long l : longs1) {
System.out.println(l);
}
System.out.println("-----------------------------------------");
long[] longs2 = Arrays.copyOfRange(array, 2, 11);
for (long l : longs2) {
System.out.println(l);
}
//long[] longs3 = Arrays.copyOfRange(array, -1, 5);
}
public static void main(String[] args) {
long[] array={1,2,3,4,5,6,7,78};
System.out.println(array);
String s = Arrays.toString(array);
System.out.println(s);
}
}
其中部分方法的实现如下
1.sort(略)
2.binarySearch(略)
3. equals(略)
4. fill(略)
5.copyOfRange(没有写copyOf)
import java.util.Arrays;
public class ArrayCopyOf {
public static long[] copyofRange(long[] src,int newlength,int fromindex ,int toindex){
long[] dest=new long[newlength];
for(int i=0;i< Math.min(Math.min(newlength, src.length-fromindex),toindex-fromindex+1);i++){
dest[i]=src[i+fromindex];
}
return dest;
}
public static void main(String[] args) {
long[] array={1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.toString(copyofRange(array, 12,3,15)));
}
}
6.toString
public class ToString {
public static String tostring(long[] array){
String r ="[";
for (int i = 0; i < array.length-1; i++) {
r+=array[i]+",";
}
if(array.length>=1){
r+=array[array.length-1];
}
r+="]";
return r;
}
public static void main(String[] args) {
long[] array={};
System.out.println(array);
System.out.println(tostring(array));
}
}
三、多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
基本使用如下
import java.util.Arrays;
public class MultiArray {
public static void main(String[] args) {
long[][] a={
{1,2,3},
{4},
{5,6,7,8,9},
null,
{10}
};
long[][] array=new long[][]{
new long[]{1,2},
new long[]{1,2,3,4},
new long[]{1,2,3}
};
String[][] s=new String[2][];
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = "Good";
s[0][1] = "Luck";
s[1][0] = "to";
s[1][1] = "you";
s[1][2] = "!";
System.out.println(a[1][0]);
System.out.println(Arrays.toString(array[1]));
System.out.println(Arrays.toString(s[0]));
System.out.println(Arrays.toString(s[1]));
}
}
总结
体会Java数组和C中的数组不一样的地方。