欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java从入门到精通_学习笔记06(数组)

程序员文章站 2022-10-03 14:55:29
学习笔记_06...


数组是最为常见的一种数据结构,是相同数据类型的用一种标识符封装到一起的基本类型数据序列或者对象序列可以用一个统一的数组名和下标来唯一确定数组中的元素。

数组概述

数组是具有相同数据类型的一组数据的集合。 在Java中,将数组看作一个对象。
根据数组的维数,可以将数组分为以下两种:

  • 一维数组
  • 二维数组

数组作为对象允许使用new关键字进行内存分配。

一维数组的创建及使用

创建一维数组
创建一维数组有以下两种方式:

  1. 先声明,再使用new关键字分配内存空间
  • (1) 声明一维数组
  • 数组元素类型   数组引用名[ ];
  • 数组元素类型[ ]   数组引用名;

注:符号"[ ]" 表示该变量是一个一维数组。


代码实例:

// 声明一维数组
int array[];
String[] strArray;
  • (2) 使用new关键字为一维数组分配内存空间
  • 数组引用名 = new   数组元素类型[ 数组元素的个数 ];

注: 使用new关键字为一维数组分配内存空间时,必须指定数组元素的类型和数组元素的个数。数组的元素个数一经分配就不可改变。


代码实例:

int arr; // 先声明一个int型的一维数组
arr = new int[5]; // 使用new关键字为这个数组分配内存空间
  1. 声明数组的同时分配内存空间

数组元素类型   数组引用名[ ] = new   数组元素类型 [ 数组元素的个数 ] ;

int arr[] = new int[5]; // 声明数组的同时使用new关键字分配内存空间

初始化一维数组
数组的初始化有以下两种方式:

// 第一种方式
int arr1[] = new arr[]{1,2,3,4,5,6,7,8,9};
// 第二种方式
int arr2[] = {1,2,3,4,5,6,7,8,9};

与上面声明创建一维数组不同,这里没有显式确定数组的长度,而是直接根据初始化的元素个数确定数组的长度。长度确定后便不可以再更改。

使用一维数组

数组引用名 [索引下标];

int arr[] = new arr[]{1,2,3,4,5,6,7,8,9};
//使用一维数组
for(int i = 0; i <arr.length ; i++){
	System.out.println("arr[" + i + "]" + ": " +arr[i]);
}

二维数组的创建及使用

二维数组通常用来表示一个表。一个一维数组的每个元素还是一个一维数组就形成了一个二维数组。

二维数组的创建

1. 声明二维数组,再使用new关键字分配内存空间

(1) 声明二维数组

  • 数组元素类型  数组引用名[ ][ ];
  • 数组元素类型[ ][ ]   数组引用名;

注: 二维数组同样需要分配内存后才能使用。


代码演示:

// 第一种声明方式
int arr1[][];
// 第二种声明方式
int[][] arr2;

(2) 使用new关键字分配内存空间

  • 直接为每一维分配内存空间
// 直接为每一维分配内存空间
int[][] arr = new int[2][4];
  • 分别为每一维分配内存空间
// 声明一个二维数组
int[][] arr;
// 先为第一维分配内存空间
arr = new int[2][];
// 再分别为第二维分配内存空间
a[0] = new int[0];
a[1] = new int[3];
  1. 声明的同时为数组分配内存空间
// 声明的同时分配内存空间
int[][] arr = new int[2][3];

注: 数组分配好内存空间后就不可以再更改。

二维数组的初始化

代码演示:

int[][] arr = new int[2][3];
// 每一维都用一个“{}”括起来
arr = {{1,2,3},{4,5,6}};
// 或者
int arr2[][] = new arr[][]{{1,2,3},{4,5,6}};

先声明创建二维数组后,初始化时每一维的元素个数不可以超过相应维的元素个数。声明的同时初始化时,如果没有显示分配内存空间,则根据初始化的每一维的元素个数最大值分配内存空间。

使用二维数组

数组引用名[行下标][列下标]

int[][] arr = int[][] arr = new int[2][3];
arr = {{1,2,3},{4,5,6}};
for(int i = 0 ; i < arr.length ; i++){
	for(int j = 0 ; j < arr[i].length ; j++){
		//数组引用名[行下标][列下标]使用数组
		System.out.println("arr[" + i + "]" + "[" + j +"] : " 
		+ arr[i][j]);
	}
}

数组的基本操作

遍历数组

  • 使用for循环来实现。
public class Trap{
	public static void main(String[] args){
		// 定义一个二维数组
		int b[][] = new int[][]{{1},{2,3},{4,5,6}};
		// 使用for循环遍历二维数组
		for(int i = 0 ; i < b.length ; i++){
			for(int j ; i < b[i].length ; j++){
				System.out.print(b[i][j]); // 打印输出二维数组元素
			}
			System.out.println(); // 没有行结束后,打印一个空行
		}
	}
}

  • 使用foreach遍历二维数组
public class Tautog{
	public static void main(String[] args){
		// 定义一个二维数组
		int a[][] = new int[][]{{1},{2,3},{4,5,6}};
		// 使用foreach循环遍历二维数组
		for(int[] b : a){
			for(int c : b){
				System.out.print(c);	
			}
			System.out.println();
		}
	}
}

填充替换数组
数组中的元素定义完成后,可以通过Arrays类的静态方法fill()来对数组中的元素进行替换。

fill()方法的两种参数类型重载

  • (1) fill(int [ ] , int value)

该方法可将指定的int值分配给int型数组的每个元素。


代码演示:

// 使用fill()静态方法必须先导入java.util.Arrays这个类
import java.util.Arrays; 

public class Swap{
	public static void main(String[] args){
		int[] arr = new int[5];
		Arrays.fill(arr , 8); // 将arr数组用8填充
		for(int a : arr){
			System.out.println(a)}
}
  • (2) fill( int a[ ] , int fromIndex , int toIndex , int value )

该方法将指定的int值分配给int型数组指定范围 [ formIndex,toIndex ) 中的每个元素。


代码演示:

import java.util.Arrays;

public class Displace{
	public static void main(String args[]){
		int arr[] = new int[]{45,12,2,10};
		Arrays.fill(arr , 1 , 2 ,8); //将 [1,2)范围内的元素替换成8
		for(int a : arr){
			System.out.println(a);
		}
	}
}

对数组进行排序
通过Arrays类中的静态方法sort( )可以实现对数组的排序。

  • Arrays.sort( 进行排序的数组引用名 )

代码演示:

import java.util.Arrays;

public class Taxis{
	public static void main(String args[]){
		int arr[] = new int[]{23,42,12,8};
		Arrays.sort(arr); // 使用Arrays类中的静态方法sort()对指定数组指定排序
		for(int a : arr){
			System.out.println(a);
		}	
	}
}

复制数组
Arrays类中的 copyOf( )copyOfRange( ) 可以实现对数组的复制。

  • copyOf( 要进行复制的数组引用名 , 指定复制后产生的新数组的长度)

代码演示:

import java.util.Arrays;

public class Cope{
	public static void main(String args[]) {
		int arr[] = new int[]{23,42,12};
		// 使用Arrays类中的静态方法copyOf()复制指定数组并返回一个指定>>长度的新数组
		int newArr[] = Arrays.copyOf(arr,5); 
		for(int a : newArr){
			System.out.println(a);
		}
	}
}
  • copyOfRange( 要进行复制的数组引用名 , 开始索引 , 结束索引)

代码演示:

import java.util.Arrays;

public class Repeat{
	public static void main(String args[]) {
		int arr[] = new int[]{23,42,12,84,10};
		//使用Arrays类中的静态方法copyOfRange()复制指定数组的指定范围内(前闭后开)的元素并返回一个新数组
		int newArr[] = Arrays.copyOfRange(arr , 0 , 3); 
		for(int a : newArr){
			System.out.println(a);
		}
	}
}

数组查询
Arrays类中的静态binarySearch( )方法,可以使用二分搜索法搜索指定数组,以获得指定对象。

  • (1)binarySearch( 要进行搜索的数组引用名 ,要搜索的值 )

代码演示:

int arr[] = new int[]{4,25,10};
// 进行二分法搜索时数组必须是有序的(从小到大)
Arrays.sort(arr);
int index = Arrays.binarySearch(arr , 25);//返回指定搜索的值所在的索引值
System.out.println(arr[index]);

注:如果没有找到指定搜索的值,将返回插入点(-index),这里“-”是指插入符,index指插入的位置。

  • (2)binarySearch( 要进行搜索的数组引用名 , 开始索引 , 结束索引 , 要搜索的值)

代码演示:

String strArrays[] = new String[]{"ab","cd","ef","yz"};
Arrays.sort(arr);
//使用Arrays类中的静态方法binarySearch()复制指定数组的指定范围内(前闭后开)的元素
//并返回指定搜索值所在的索引值
int index = Arrays.binarySearch(strArrays , 0 , 2 , "cd");
Sysrem.out.println(strArrays[index]);

本文地址:https://blog.csdn.net/qq_42429057/article/details/107582312