龙空技术网

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

CC躺平混吃 69

前言:

现时同学们对“string数组怎么添加元素”大致比较关心,朋友们都需要分析一些“string数组怎么添加元素”的相关资讯。那么小编在网上搜集了一些关于“string数组怎么添加元素””的相关资讯,希望小伙伴们能喜欢,看官们一起来了解一下吧!

原文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) 删除指定索引位置的元素,并将后面的所有元素前移。返回所删除的元素

标签: #string数组怎么添加元素