Java数组

devtools/2024/9/22 14:58:30/

Java数组的用法

在Java中,数组是一种常用的数据结构,用于存储相同类型的多个元素,以下是一些关于Java数组的基本学习要点。

1. 数组的声明

声明一个数组变量,指定其类型,但此时不分配内存空间。

int[] numbers; // 声明一个整型数组变量

2. 数组的初始化

在声明的同时初始化数组,也可以单独初始化。

声明并初始化

int[] numbers = {1, 2, 3, 4, 5}; // 声明并初始化一个整型数组

单独初始化

int[] numbers; // 声明
numbers = new int[5]; // 初始化,分配5个整数的空间
// 然后可以单独设置每个元素的值
numbers[0] = 1;
numbers[1] = 2;
// ...

3. 访问数组元素

使用索引(从0开始)来访问数组中的元素。

int firstNumber = numbers[0]; // 访问数组的第一个元素

4. 数组的长度

使用 length 属性来获取数组的长度(即元素的数量)。

int length = numbers.length; // 获取数组的长度

5. 数组的遍历

使用循环(如for循环)来遍历数组中的每个元素。

for (int i = 0; i < numbers.length; i++) {System.out.println(numbers[i]);
}

6. 多维数组

Java还支持多维数组,如二维数组

int[][] matrix = {{1, 2, 3},{4, 5, 6},{7, 8, 9}
};

7. 数组作为方法参数和返回值

你可以将数组作为参数传递给方法,也可以从方法中返回数组

public static int[] doubleArray(int[] array) {int[] result = new int[array.length];for (int i = 0; i < array.length; i++) {result[i] = array[i] * 2;}return result;
}

8. 数组拷贝

Java提供了几种方式来拷贝数组,如使用 System.arraycopy() 方法或使用 Arrays.copyOf() 方法。

int[] copiedArray = Arrays.copyOf(numbers, numbers.length);

9. 数组排序

使用 Arrays.sort() 方法可以对数组进行排序。

Arrays.sort(numbers);

10. 数组查找

  • 基本查找:当数组元素无序时,从头找到尾进行查找。

  • 二分查找(折半查找):当数组元素有序时,通过每次比较中间元素,将查找范围减半,从而提高查找效率。

使用 Arrays.binarySearch() 方法可以在已排序的数组中进行高效查找。但在使用之前,必须确保数组已排序。

int index = Arrays.binarySearch(numbers, targetValue);

11. 数组填充

使用 Arrays.fill() 方法可以快速填充数组。可以填充整个数组,也可以填充指定范围的数组元素。

12. 数组转换

数组转字符串:使用 Arrays.toString() 方法可以将数组转换为字符串表示形式。

13. 数组连接

  • 使用 System.arraycopy() 或循环遍历的方式连接两个数组

  • 使用第三方库如Apache Commons Lang的 ArrayUtils.addAll() 方法可以更方便地连接数组

14. 数组比较

使用 Arrays.equals() 方法可以比较两个数组是否相等。

注意,直接使用 == 运算符比较两个数组将比较它们的引用地址,而不是内容。

15. 数组与集合框架的互操作

Java的集合框架(如ArrayList、HashSet等)提供了丰富的功能,可以与数组进行互操作。

  • 数组转换为列表,然后再对列表进行操作,例如:List<Integer> list = Arrays.asList(numbers);   (请注意,返回的列表大小固定,不支持增删操作)。

  • 将列表转换为数组,例如:Object[] objects = list.toArray();  

16. 数组

使用Java 8引入的流(Stream)API,可以对数组进行更高效、更简洁的操作。例如,可以使用 Arrays.stream() 方法将数组转换为流,然后使用流的各种操作对数据进行处理。

17. 数组与泛型

在Java中,可以使用泛型来创建可以处理任何类型数组的类和方法。这增加了代码的灵活性和可重用性。

Java数组案例代码

1. 数组排序

使用 Arrays.sort() 方法进行排序:

java">import java.util.Arrays;public class ArraySortDemo {public static void main(String[] args) {int[] numbers = {5, 2, 9, 1, 5, 6};Arrays.sort(numbers);System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 5, 5, 6, 9]}
}

2. 数组查找

使用 Arrays.binarySearch() 方法进行二分查找(数组必须已排序):

java">import java.util.Arrays;public class ArraySearchDemo {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};Arrays.sort(numbers); // 二分查找前需要排序int index = Arrays.binarySearch(numbers, 5);if (index >= 0) {System.out.println("Element found at index: " + index);} else {System.out.println("Element not found");}}
}

3. 数组复制

使用 Arrays.copyOf() 方法进行复制:

java">import java.util.Arrays;public class ArrayCopyDemo {public static void main(String[] args) {int[] original = {1, 2, 3, 4, 5};int[] copied = Arrays.copyOf(original, original.length);System.out.println(Arrays.toString(copied)); // 输出: [1, 2, 3, 4, 5]}
}

4. 数组填充

使用 Arrays.fill() 方法进行填充:

java">import java.util.Arrays;public class ArrayFillDemo {public static void main(String[] args) {int[] numbers = new int[5];Arrays.fill(numbers, 10);System.out.println(Arrays.toString(numbers)); // 输出: [10, 10, 10, 10, 10]}
}

5. 数组与集合框架的互操作

数组转换为列表:

java">import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class ArrayToListDemo {public static void main(String[] args) {Integer[] numbers = {1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(numbers); // 注意:这里的列表是固定大小的// 如果需要修改列表大小,可以转换为ArrayListList<Integer> arrayList = new ArrayList<>(Arrays.asList(numbers));arrayList.add(6); // 可以添加元素System.out.println(arrayList); // 输出: [1, 2, 3, 4, 5, 6]}
}

列表转数组

java">import java.util.ArrayList;
import java.util.List;public class ListToArrayExample {public static void main(String[] args) {// 创建一个ArrayListList<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("cherry");// 使用toArray()方法转换为数组// 注意:toArray()方法默认返回Object[]类型,所以我们需要进行类型转换Object[] objects = list.toArray();// 如果你知道列表中的元素类型,可以这样做来避免不必要的类型检查或ClassCastException// 使用toArray(T[] a)方法并传入一个空数组,该数组的类型与你期望的结果类型相同String[] strings = list.toArray(new String[0]);// 输出数组元素for (String s : strings) {System.out.println(s);}}
}

6. 数组流(Java 8及以上版本)

使用流对数组进行操作:

java">public class ArrayStreamDemo {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5};int sum = IntStream.of(numbers).sum();System.out.println("Sum: " + sum); // 输出: Sum: 15}
}

7. 数组与泛型

泛型可以与数组一起使用,但需要注意Java中的泛型不支持基本数据类型(如int、double等)。你需要使用它们的包装类(如Integer、Double等)。以下是一个泛型方法,它接受一个泛型数组并打印其内容:

java">public class GenericArrayMethodDemo {public static <T> void printArray(T[] array) {for (T element : array) {System.out.print(element + " ");}System.out.println();}public static void main(String[] args) {Integer[] integers = {1, 2, 3, 4, 5};String[] strings = {"one", "two", "three"};printArray(integers); // 输出: 1 2 3 4 5printArray(strings);  // 输出: one two three}
}

注意,泛型在数组上的使用有限制,因为Java不允许创建泛型数组(如T[] array = new T[size];是无效的)。但你可以像上面那样使用泛型方法接受泛型数组作为参数。

8. 多维数组

在Java中,你可以创建多维数组,例如二维数组。以下是一个二维数组的示例:

java">public class MultiDimensionalArrayDemo {public static void main(String[] args) {int[][] matrix = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};// 遍历二维数组for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {System.out.print(matrix[i][j] + " ");}System.out.println();}}
}

9. 数组连接

在Java中,数组没有直接的连接方法,但你可以通过循环或使用 System.arraycopy() 方法来实现:

java">public class ArrayConcatenationDemo {public static void main(String[] args) {int[] array1 = {1, 2, 3};int[] array2 = {4, 5, 6};// 使用System.arraycopy()连接数组int[] combined = new int[array1.length + array2.length];System.arraycopy(array1, 0, combined, 0, array1.length);System.arraycopy(array2, 0, combined, array1.length, array2.length);// 打印连接后的数组for (int num : combined) {System.out.print(num + " ");}}
}

10. 数组作为参数和返回值

数组可以作为方法的参数和返回值。

java">public class GenericArrayMethodDemo {public static <T> void printArray(T[] array) {for (T element : array) {System.out.print(element + " ");}System.out.println();}public static void main(String[] args) {Integer[] integers = {1, 2, 3, 4, 5};String[] strings = {"one", "two", "three"};printArray(integers); // 输出: 1 2 3 4 5printArray(strings);  // 输出: one two three}
}

完成!enjoy it!


http://www.ppmy.cn/devtools/52306.html

相关文章

你好GPT-4o——对GPT-4o发布的思考与看法

你好GPT-4o 前言 2024年5月13日&#xff0c;OpenAI官网发布了他们的新一代自然语言处理交互系统——GPT-4o。这是OpenAI继GPT4之后又一个新的旗舰模型。 GPT-4o&#xff08;“o”代表“omni”&#xff09;是迈向更自然的人机交互的一步——它接受文本、音频、图像和视频的任意…

【系统架构设计师】一、计算机系统基础知识(指令系统|存储系统|输入输出技术|总线结构)

目录 一、指令系统 1.1 计算机指令 1.2 指令寻址方式 1.3 CISC 与 RISC 1.4 指令流水线 二、存储系统 2.1 分级存储体系 2.2 地址映射 2.3 替换算法 2.4 磁盘 2.4.1 磁盘结构和参数 2.4.2 磁盘调度算法 三、输入输出技术 四、总线结构 五、考试真题练习 一、指令…

SpringBoot 实现 阿里云语音通知(SingleCallByTts)

目录 一、准备工作1.开通 阿里云语音服务2.申请企业资质3.创建语音通知模板&#xff0c;审核通过4.调用API接口---SingleCallByTts5.调试API接口---SingleCallByTts 二、代码实现1.导入依赖 com.aliyun:aliyun-java-sdk-dyvmsapi:3.0.22.创建工具类&#xff0c;用于发送语音通知…

【C++进阶学习】第二弹——继承(下)——挖掘继承深处的奥秘

继承&#xff08;上&#xff09;&#xff1a;【C进阶学习】第一弹——继承&#xff08;上&#xff09;——探索代码复用的乐趣-CSDN博客 前言&#xff1a; 在前面我们已经讲了继承的基础知识&#xff0c;让大家了解了一下继承是什么&#xff0c;但那些都不是重点&#xff0c;今…

微软将 AI 工具和软件的研发工作外包给 OpenAI

微软将 AI 工具和软件的研发工作外包给 OpenAI 科技媒体 CNBC 报道称&#xff0c;微软正计划将其人工智能&#xff08;AI&#xff09;工具和软件的开发工作外包给OpenAI&#xff0c;这对竞争对手谷歌来说无疑是一个利好消息。 Okta首席执行官Todd McKinnon表示&#xff0c;微…

找工作小项目:day16-重构核心库、使用智能指针(1)

day16-重构核心库、使用智能指针 今天是该项目开源在gthub的最后一天&#xff0c;我这里只是将我自己对于这个项目的理解进行总结&#xff0c;如有错误敬请包含指正&#xff0c;今天会整体理一遍代码&#xff0c;并使用智能指针管理整个项目。 1、common 头文件 定义宏用于…

云原生应用开发培训,开启云计算时代的新征程

在云计算时代&#xff0c;云原生应用开发技术已经成为IT领域的热门话题。如果您想要转型至云原生领域&#xff0c;我们的云原生应用开发培训将帮助您开启新征程。 我们的课程内容涵盖了云原生技术的基础概念、容器技术、微服务架构、持续集成与持续发布&#xff08;CI/CD&#…

Hi3861 OpenHarmony嵌入式应用入门--hello world

这篇文章我们开始根据自己的开发板编写测试例程&#xff0c;通过编写例程来更好的学习。 目的&#xff1a;使用开发板上电后周期性打印“hello world” 我们需要创建自己的开发板工程目录&#xff0c;这里大部分时候会参考hqyj开发板的目录&#xff0c;但是我们会从0开始&…