16.数组

本文深入探讨了Java中数组的特点及应用,包括数组与其他容器的区别、对象与基本类型的数组存储方式、粗糙数组的概念与实例、利用java.util.Arrays进行数组操作的方法,以及数组与泛型之间的兼容性问题。

1.数组和其他容器的区别
效率,类型和保存基本类型的能力。
效率是以数组大小被固定的代价换来的。
在泛型之前,容器的对象都被当做object,而数组则可以限制某种类型。
其他容器通过包装基本类型来保存。

2.对象和基本类型数组

对象数组保存引用。

基本类型数组保存值。

3.粗糙数组

维度长度不一数组。
int[][][] a = new int[rand.nextInt(7)][][];
    for(int i = 0; i < a.length; i++) {
      a[i] = new int[rand.nextInt(5)][];
      for(int j = 0; j < a[i].length; j++)
        a[i][j] = new int[rand.nextInt(5)];
    }

4.java.util.Arrays
其中的deepToString可以对数组值做深层输出。

int[] a = new int[5];
Arrays.fill(a,5);

String[] b = new String[9];
Arrays.fill(b,"hello");
Arrays.fill(b,3,5,"world");//填充数组的3到5的区域。

 int[] arr = {93, 5, 3, 55, 57, 7, 2 ,73, 41, 91};
 Arrays.sort(arr);//排序
 Arrays.binarySearch(arr, key);//如果没找到返回负值。返回值=插入点-1;
 Arrays.equals(arr1, arr2)); //比较两个数组,返回true或false
 Arrays.deepEquals(arr1, arr2));//可以对二维仍至三维以上的数组进行比较是否相等
 
 System.arraycopy(源数组,源起始位置,目标数组,目标起始位置,复制个数)如果是对象则复制 引用。

5.数组和泛型
两者不能很好的结合。

Peel<Banana>[] peels = new Peel<Banana>[10];//illegal
擦除会移除参数类型信息,而数组必须知道它们所持有的确切类型,以强制保证类型安全。

但是可以创建泛型数组引用。
List<String>[] ls;
然后创建非泛型数组,将其强制转换。
    List[] la = new List[10];
    ls = (List<String>[])la;
    ls[1] = new ArrayList<String>;
    // Compile-time checking produces an error:
     //! ls[1] = new ArrayList<Integer>();
    因为数组是协变类型的,List<String> 也是一个Object[].
     Object[] objects = ls; // So assignment is OK
    // Compiles and runs without complaint:
    objects[1] = new ArrayList<Integer>();

<think>我们正在处理用户关于Java数组定义和取值的问题。用户提供了一个具体的数组示例[3,4,5,6,7,8,988,87],并希望获取988这个元素。根据用户要求,我们需要提供代码示例。步骤:1.定义数组:在Java中,我们可以使用数组字面量直接初始化数组,也可以先声明数组类型和大小再赋值。2.获取指定元素:通过索引(下标)来获取数组中的元素,注意索引从0开始。在给定的数组中,988是第7个元素(从0开始数,第6个位置)。示例代码:我们将定义一个一维整型数组,然后通过索引6来获取988。注意:用户要求的是代码示例,所以我们需要用代码块展示。同时,按照系统级指令,我们需要在最后生成相关问题。回答结构:一、数组定义二、数组取值三、完整示例代码四、相关问题</think>### Java 数组定义与取值详解 #### 一、数组定义语法 在 Java 中定义数组的两种方式: ```java // 方式1:声明+初始化(推荐) 数据类型[] 数组名 = {值1, 值2, ...}; // 方式2:先声明后赋值 数据类型[] 数组名 = new 数据类型[长度]; 数组名[索引] = 值; ``` #### 二、获取数组元素 通过索引访问元素(索引从 0 开始): ```java 数据类型 变量 = 数组名[索引]; ``` #### 三、完整示例代码 ```java public class ArrayDemo { public static void main(String[] args) { // 1. 定义数组 [3,4,5,6,7,8,988,87] int[] numbers = {3, 4, 5, 6, 7, 8, 988, 87}; // 2. 获取元素988(索引位置计算) // 元素位置:0:3, 1:4, 2:5, 3:6, 4:7, 5:8, 6:988, 7:87 int target = numbers[6]; // 3. 打印验证 System.out.println("数组内容: " + Arrays.toString(numbers)); System.out.println("索引6的元素值: " + target); // 输出: 988 } } ``` #### 四、关键说明 1. **索引计算** 数组元素位置 = 所需元素序号 - 1 例如取第7个元素 → 索引 = 7 - 1 = 6 2. **数组长度获取** ```java int length = numbers.length; // 本例中 length = 8 ``` 3. **索引越界保护** 访问前建议检查索引有效性: ```java if (index >= 0 && index < numbers.length) { int value = numbers[index]; } ``` #### 五、执行结果 ``` 数组内容: [3, 4, 5, 6, 7, 8, 988, 87] 索引6的元素值: 988 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值