我们前面学习了数组
比如String[]
数组,同样我们还学习了老外提供给我们的Arrays类
,可以对数据进行一些方便的操作。
然而业务上仅仅是纯数组,但是依然不能满足我们的要求。
因此老外又帮我们贴心的设计了一系列『接口+类』,叫做『集合』。
两大接口:
1、Collection
2、Map
都存在于java.util
包里。
我们先讲Collection
这玩意儿下面还包含了3个主接口:
List、Queue、Set。
这3个也只是接口,具体实现的类主要有ArrayList、LinkedList、Vector
。
ArrayList其实就是老外帮我们写得蛮牛逼的一个Object[] 的操作。
插入/删除一个元素就是:重新确定数组长度,然后重新产生一个数组(数组长度是不可变的,因此通过copy的方式)
因此,ArrayList通过索引取值或者修改内容比较快;插入和删除比较慢。
import java.util.ArrayList;
import java.util.List;
public class Index {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("a"); //往集合里加入元素
list.add("b");
list.add("c");
list.add("d");
//获取
System.out.println(list.get(1)); //输出: "b"
}
}
如果用LinkedList:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Index {
public static void main(String[] args){
LinkedList<String> list = new LinkedList<String>();
list.add("a"); //往集合里加入元素
list.add("b");
list.add("c");
list.add("d");
//获取
System.out.println(list.get(1)); //输出: "b"
}
}
实现的功能是一样的,但是区别在:访问比较慢,但是新增和删除比较快。
数据太少,不必纠结选择Arraylist还是LinkedList
我们来讲一下循环
LinkedList<String> list = new LinkedList<String>();
list.add("a"); //往集合里加入元素
list.add("b");
list.add("c");
list.add("d");
// 遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
因为ArrayList获取比较快,需要经常遍历,我们可以选择ArrayList。
其他遍历方式:
// 另外2种遍历方式
for (String s:list){
System.out.println(s);
}
// 迭代器是形式
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}