百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

java 核心技术-12版 卷Ⅰ- 5.3.2 访问数组列表元素

toyiye 2024-07-15 01:23 7 浏览 0 评论

原文

5.3.2 访问数组列表元素

很遗憾,天下没有免费的午餐。为了提供数组列表自动扩展容量的便利,这要求使用一种更复杂的语法来访问元素。其原因是 ArrayList 类并不是 Java 序设计语言的一部分,它只是由某个人编写并放在标准库中的一个实用工具类。

不能使用我们喜爱的[ ]语法格式访问或改变数组的元素,而要使用 get set 方法

例如,要设置第 i 个元素,可以使用

staff.set(i,harry);

它等价于对数组 a的元素赋值(与数组一样,索引值从0开始):

a[i] = harry;

警告:只有当数组列表的大小大于i时,才能够调用 list.set(i,x)。例如,下面这段代码是错误的:

var list = new ArrayList<Employee>(100); // capacity 100,size 0

list.set(0, x); // no element 0 yet

要使用 add 方法为数组添加新元素,而不是 set 方法,set 方法只是用来替换数组

中之前增加的一个元素。

要得到一个数组列表的元素,可以使用

Employee e= staff.get(i);

这等价于

Employee e = a[ i ];

注释:没有泛型类时,原始 ArrayList 类提供的 get 方法别无选择,只能返回 Object。因此,get 方法的调用者必须将返回值强制转换为所需的类型:

Employee e = (Employee) staff.get(1);

原始ArrayList 还存在一定的危险性。它的 add和set 方法接受任意类型的对象。对于下面这个调用

staff.set(i,"Harry Hacker");

它能正常编译而不会给出任何警告,只有在获取对象并试图对它进行强制类型转换时才会发现有问题。如果使用ArrayList<Employee>,编译器就会检测到这个错误。


下面这个技巧可以一举两得,既可以灵活地扩展数组,又可以方便地访问数组元素。首先,创建一个数组列表,并添加所有的元素:

var list = new Arraylist<X>();

while (...){

x = ...;

list.add(x);

}

执行完上述操作后,使用 toArray 方法将数组元素复制到一个数组中

var a = new X[list.size()];

list.toArray(a);

有时需要在数组列表的中间增加元素,为此可以使用 add 方法并提供一个索引参数:

int n = staff.size()/2 ;

staff.add(n,e);

位置n及之后的所有元素都要向后移动一个位置,为新元素留出空间。插入新元素后,如果数组列表的新大小超过了容量,数组列表就会重新分配它的存储数组。

类似地,可以从数组列表中间删除一个元素:

Employee e= staff.remove(n);

位于这个位置之后的所有元素都向前移动一个位置,并且数组的大小减 1。

插入和删除元素的效率很低。对于较小的数组列表来说,不必担心这个问题。但如果存储的元素很多,又经常需要在中间插入和删除元素,就应该考虑使用链表了。有关如何用链表编程的内容将在第9章介绍。

可以使用“for each”循环遍历数组列表的内容:

for(Employee e:staff)
  //	do something with e // 使用 e 执行某些操作

这个循环和以下代码具有相同的效果:

for(int x =0;x <staff.size();x++){
	Employee e = staff.get(i);
  	// 对e 执行某些操作

}
  

程序清单 5-7 对第 4章中的 EmployeTest 做了修改。在这里,将 Employee[] 数组替换成了ArrayList<Employee>。请注意下面的变化

  • 不必指定数组的大小。
  • 使用 add 增加任意多个元素。
  • 使用size()而不是length统计元素个数
  • 使用a.get(i) 而不是 [i] 来访问元素


程序清单5-7 arrayList/ArrayListTest.java

package arrayList;

import java.util.*;

/**
 * This program demonstrates the ArrayList class.
 * @version 1.11 2012-01-26
 * @author Cay Horstmann
 */
public class ArrayListTest
{
   public static void main(String[] args)
   {
      // fill the staff array list with three Employee objects
      var staff = new ArrayList<Employee>();

      staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
      staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1));
      staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15));

      // raise everyone's salary by 5%
      for (Employee e : staff)
         e.raiseSalary(5);

      // print out information about all Employee objects
      for (Employee e : staff)
         System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" 
            + e.getHireDay());
   }
}

API java.util.ArrayList<E> JDK1.2

  • E set(int index, E obj) 将值 obj 放置在数组列表的指定索引位置,返回之前的内容
  • E get(int index) 得到指定索引位置存储的值。
  • void add(int index,E obj) 后移元素从而将 obj 插人指定索引位置
  • E remove(int index) 删除指定索引位置的元素,并将后面的所有元素前移。返回所删除的元素

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码