以前刚学 java 的时候对 List 列表没有认真学习,再加上后期没有怎么用就没有去研究,但是在后面写 java web 的时候遇到有关 List 的一点问题,那时候也是靠着百度解决问题,但是还是没有弄清楚 List 是怎样的。还好这次实习的时候认真的对 List 学习了一下,不敢说彻底明白了它的机制和用法,但至少遇到相关的需求可以使用 List 完成。
List 是一个集合,但是可以包含相同的元素,其实说简单点,在我看来 List 就是将不同类型的数据拼接在一起,其中以英文状态下的逗号(“,”)作为分隔符。
举个例子,通常我们通过下面这种方式来 new 一个 List
List<String> shops=new ArrayList<>();
短短一行代码里面有着不少东西。首先看到 <> 里面的内容,为 String,也就是说 List 里面的数据是字符串类型,这个数据类型可以自己选择,不管是字符串整型还是其他,甚至是HashMap类型也行。对于这个 <> 或许有人会有疑问,为什么不是 ()?在这里说一下,<> 是 java 泛型的表示形式,泛型是JDK1.5引入的新特性,泛型的其本质是实例化类型。需要注意的是类型参数只能代表引用型类型(像Intege,Double等),不能是原始类型(像int,double,char的等)
后面new的是 ArrayList ,是一个数组列表,ArrayList 可以看作是能够自动增长容量的数组。List有两个重要的实现类:ArrayList和LinkedList,在这里就不多加叙述。
现在开始讲讲 List 的一下相关操作。
在 List 中添加数据是使用 add() 方法,而获取 List 内容则是使用 get() 方法。
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String[] args){
List<String> message=new ArrayList<>();
message.add("namea"); //往List中添加数据
message.add("age");
for(int i=0;i<message.size();i++) {
// 仅下面这一行就可以输出List中的数据
System.out.println(message.get(i));
//下面这段代码也可以用来输出,主要是要显示一下split()方法
String[] data=message.get(i).split(","); //需要用get()方法获得List的值,然后以逗号进行分割
for(int j=0;j<data.length;j++) {
System.out.println(data[j]);
}
}
}
}
像上面的是最基本的应用,但也是用的最多的。在 List 里面其实我最没弄明白的是在 List 中添加数组类型的数据该如何添加和遍历这些数据,下面的代码仅供参考,如有错误请指正。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args){
List<String[]> data=new ArrayList<String[]>();
for(int i=0;i<2;i++) {
String row[] = new String[2];
row[0]="name"+i;
row[1]="age"+i;
data.add(row); //往List中添加数组
}
for(int i=0;i<data.size();i++) {
String[] a=data.get(i); //获取List中的值
for(int j=0;j<a.length;j++) {
System.out.println(a[j]);
}
}
}
}
除了上面用循环来遍历List,我们还可以使用迭代器来遍历列表
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Iterator;
public class test {
public static void main(String[] args){
List<String> message=new ArrayList<>();
message.add("namea"); //往List中添加数据
message.add("age");
Iterator iter = message.iterator();
// 这是java 1.5以前的做法,现在还能用,但是比较麻烦
while(iter.hasNext()){
//如果存在,则调用next实现迭代
String str = (String)iter.next();
System.out.println(str);
}
//这是java 1.5以后的做法,在1.8中可以用lambda表达式来完成
for (String str: message) {
System.out.println(str);
}
}
}