1、Java ArrayList
ArrayList类是可调整大小的数组,可以在java.util包中找到。
Java中的数组与Java中的ArrayList之间的区别在于,数组的大小无法修改(如果要向数组中添加元素或从中删除元素,则必须创建一个新的)。虽然可以随时根据需要从ArrayList中添加和删除元素。语法也略有不同:
例如:
创建一个名为langs的ArrayList对象,该对象将存储字符串:import java.util.ArrayList; // import the ArrayList class
ArrayList langs = new ArrayList(); // 创建 ArrayList对象
2、向ArrayList添加元素
ArrayList类具有许多有用的方法。 例如,要将元素添加到ArrayList,需要使用add()方法:
例如:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList langs = new ArrayList();
langs.add("c");
langs.add("java");
langs.add("python");
langs.add("cjavapy");
System.out.println(langs);
}
}
3、访问ArrayList中元素
要访问ArrayList中的元素,请使用get()方法并引用索引号:
例如:langs.get(0);
注意:数组索引以0开头:[0]是第一个元素。 [1]是第二个元素,依此类推。
4、修改ArrayList中元素
要修改元素,需要使用set()方法并引用索引号:
例如:
langs.set(0, "C#");
5、删除ArrayList中元素
要删除元素,需要使用remove()方法并引用索引号:
例如:
langs.remove(0);
要删除ArrayList中的所有元素,请使用clear()方法:
例如:langs.clear();
6、ArrayList size
要找出ArrayList有多少个元素,需要使用size方法:
例如:langs.size();
7、循环遍历 ArrayList
使用for循环遍历ArrayList的元素,并使用size()方法指定循环应运行的次数:
例如:public class Main {
public static void main(String[] args) {
ArrayList langs = new ArrayList();
langs.add("c");
langs.add("java");
langs.add("python");
langs.add("cjavapy");
for (int i = 0; i < langs.size(); i++) {
System.out.println(langs.get(i));
}
}
}
还可以通过for-each循环遍历ArrayList:
例如:public class Main {
public static void main(String[] args) {
ArrayList langs = new ArrayList();
langs.add("c");
langs.add("java");
langs.add("python");
langs.add("cjavapy");
for (String i : langs) {
System.out.println(i);
}
}
}
8、其它类型
ArrayList中的元素实际上是对象。在上面的示例中,我们创建了元素 (对象)类型为字符串。Java中的String是一个对象(不是原始类型)。要使用其他类型,例如,int,必须指定等效的包装器类:Integer。对于其他基本类型,需要使用:Boolean表示布尔值,Character表示char,Double表示double,等等:
例如:
创建一个ArrayList来存储数字(添加类型为Integer的元素):import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList myNumbers = new ArrayList();
myNumbers.add(10);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(25);
for (int i : myNumbers) {
System.out.println(i);
}
}
}
9、ArrayList的排序
java.util包中另一个有用的类是Collections类,该类包括用于对列表进行字母或数字排序的sort()方法:
例如:
对字符串的ArrayList进行排序:
import java.util.ArrayList;
import java.util.Collections; // Import the Collections class
public class Main {
public static void main(String[] args) {
ArrayList langs = new ArrayList();
langs.add("c");
langs.add("java");
langs.add("python");
langs.add("cjavapy");
Collections.sort(langs); // Sort cars
for (String i : langs) {
System.out.println(i);
}
}
}
例如:
对整数数组列表进行排序:import java.util.ArrayList;
import java.util.Collections; // Import the Collections class
public class Main {
public static void main(String[] args) {
ArrayList myNumbers = new ArrayList();
myNumbers.add(33);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(34);
myNumbers.add(8);
myNumbers.add(12);
Collections.sort(myNumbers); // Sort myNumbers
for (int i : myNumbers) {
System.out.println(i);
}
}
}
10、 ArrayList重要的方法、属性和实例
1)构造器
ArrayList提供了三个构造器:
public ArrayList();
默认的构造器,将会以默认(16)的大小来初始化内部的数组
public ArrayList(ICollection);
用一个ICollection对象来构造,并将该集合的元素添加到ArrayList
public ArrayList(int);
用指定的大小来初始化内部的数组
2)IsSynchronized属性和ArrayList.Synchronized方法
IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。
如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如:ArrayList list = new ArrayList();
//...
lock(list.SyncRoot) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性
{
list.Add("Add a Item");
}
如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。
3)Count属性和Capacity属性
Count属性是目前ArrayList包含的元素的数量,这个属性是只读的。
Capacity属性是目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。
4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
Add:方法用于添加一个元素到当前列表的末尾
AddRange:方法用于添加一批元素到当前列表的末尾
Remove:方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt:方法用于删除一个元素,通过索引值来删除
RemoveRange:用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert:用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange:用于从指定位置开始添加一批元素,列表后面的元素依次往后移动
Clear:方法用于清除现有所有的元素
Contains:方法用来查找某个对象在不在列表之中
5)TrimSize方法
这个方法用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
6)ToArray方法
这个方法把ArrayList的元素Copy到一个新的数组中。
ArrayList实例:import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
// 创建ArrayList
ArrayList list = new ArrayList();
// 将“”
list.add("1");
list.add("2");
list.add("3");
list.add("4");
// 将下面的元素添加到第1个位置
list.add(0, "5");
// 获取第1个元素
System.out.println("the first element is: "+ list.get(0));
// 删除“3”
list.remove("3");
// 获取ArrayList的大小
System.out.println("Arraylist size=: "+ list.size());
// 判断list中是否包含"3"
System.out.println("ArrayList contains 3 is: "+ list.contains(3));
// 设置第2个元素为10
list.set(1, "10");
// 通过Iterator遍历ArrayList
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
System.out.println("next is: "+ iter.next());
}
// 将ArrayList转换为数组
String[] arr = (String[])list.toArray(new String[0]);
for (String str:arr)
System.out.println("str: "+ str);
// 清空ArrayList
list.clear();
// 判断ArrayList是否为空
System.out.println("ArrayList is empty: "+ list.isEmpty());
}
}