前言:
现时同学们对“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数组怎么添加元素