Array list(数组列表)
数组列表在英文中的解释是:
similar to an array but an ArrayList object’s size is automatically
adjusted to accommodate the number of items being stored.
翻译过来就是:类似于数组,但ArrayList对象的大小会自动调整以适应存储的项目数.
由此可知这是一个类似数组的东西,但是它是动态存储,有点像c语言中的链表,但与链表不同的是它可以根据数组下标直接找到对应元素,不必像链表一样遍历。
Array list(数组列表)包含在java.util package中
接下来我们说一下数组列表的一些有关方法:
- ArrayList aList = new ArrayList();这是数组列表的一个声明
- add items (next item or at a particular position)//添加数据
例如:aList.add(“apple”); //如果插入的前方没有数字,则默认插入到数组列表的尾端。
aList.add(1, “pear”);//表示在下标为1的地方插入字符串“pear”,同时后面的元素依次后移。 - get an item at a particular position//读取数据
例如:aList.get(0); //读取下标为0的元素
aList.get(1);//读取下标为1的元素 - get the size of the list//获取数组长度
例如:aList.size();//这里的size()还有一个妙用,我会在下面进行说明 - write out the entire list without having to visit each element
例如:System.out.print(aList);//将列表中值全部输出,这里不需要像数组一样用for循环逐一输出,这也是数组列表的一个优点。
下面是一个实例,可以帮助大家理解数组列表动态的过程:
import java.util.Scanner;
import javax.swing.JOptionPane;
import java.util.*;
public class Task2
{
public static void main(String [] args)
{
ArrayList<String> aList = new ArrayList<String>();
//不同类型的数组列表需要加上不同的类型名称,如果是int型我们则需要:ArrayList<Integer>aList = new ArrayList<Integer>();来表示
aList.add("blue");
aList.add("black");
aList.add("red");
aList.add(1, "yellow");
aList.add((aList.size() - 1), "green");
System.out.println(aList);
}
}
输出结果:[blue, yellow, black, green, red]
过程讲解:
1.首先我们在这个列表中插入了一个"blue",这时候列表只有唯一一个元素:blue
2.我们再次插入了一个"black"在列表尾端,此时列表元素为:blue、black.
3.再次在尾端插入"red",此时列表元素为:blue、black、red.
4.在下标为1的地方插入一个"yellow",此时列表元素为:blue、yellow、black、red.//值得注意的是:列表是以下标0为开始,所以yellow会插入到第2位,同时后面的元素依次后移一位。
5.此时列表中共有4个元素,所以(aList.size() - 1)=3,也就是在下标为3的地方插入"green",由于列表下表从0开始,所以下表为3的地方也就是元素"red"的位置,此时我们会将”green“插入到原本”red“的位置,同时将”red“后移一位,所以最有也就形成了[blue, yellow, black, green, red]的输出。
其实数组列表还有很多方法在这里我就不一一详细讲解了:
- aList.remove(1); //删除数据
- aList.clear(); //删除所有元素
- aList.set(1, “pink”);//修改
- System.out.println(aList.contains(“red”));//查找
- System.out.println(aList.indexOf(“black”));//返回表中第一个匹配元素的下标
- System.out.println(aList.lastIndexOf(“red”));//返回最后一个匹配的元素的下标
- contains(“red”);//如果此列表中包含指定的元素,则返回true
- indexOf(“black”);//返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回-1
- lastIndexOf(“red”);//返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回-1
- isEmpty();//如果此列表中没有元素,则返回true 。这里也可以用size(),如果size()=0则也代表列表中没有元素
- System.out.print(aList);//输出
- for (int i = 0; i < aList.size(); i++) //输出
System.out.println(aList.get(i));
下面附上几个程序希望能够帮助大家更好的理解这些方法。
import java.util.*;
public class ArrayList3
{
public static void main(String [] args)
{
ArrayList<String> aList = new ArrayList<String>();
aList.add("blue");
aList.add("black");
aList.add("red");
aList.add(1, "yellow");
aList.add((aList.size() - 1), "green");
aList.remove(1);
aList.set(1, "pink");
for (int i = 0; i < aList.size(); i++)
System.out.print(aList.get(i) + "\t");
}
}
输出结果:blue pink green red
import java.util.*;
public class ArrayList4
{
public static void main(String [] args)
{
ArrayList<String> aList = new ArrayList<String>();
int position; aList.add("blue"); aList.clear();
System.out.println(aList.isEmpty());
aList.add("black"); aList.add("red");
System.out.println(aList.contains("red"));
position = aList.indexOf("black");
System.out.println(position);
position = aList.lastIndexOf("red");
System.out.println(position);
System.out.println(aList);
}
}
输出结果:
true
true
0
1
[black, red]
Multi Dimensional Array List(多维数组列表)
- public static ArrayList<ArrayList> contactsList;//多维数组列表的声明
- 多维数组列表创建 ,该函数会创建一个n列的多维数组列表,每一列可以看做一个单独的数组列表
public static void createArrayList()
{
int numberOfSubLists = n;
contactsList = new ArrayList<ArrayList<String>>();
for (int i = 1; i <= numberOfSubLists; i++)
contactsList.add(i, new ArrayList<String>());
}
- contactsList.get(i).add(0, “yellow”);//提取第i列数组列表,并在下标为0的位置添加"yellow"元素
- if (contactsList.get(i).size() == 0)//可以用来判断第i列数组列表是否为空列表
- result=contactsList.get(n).get(m)//提取第n列数组列表中下标为m的元素,并把该元素赋值给result