List集合代表一个有序的集合,每个元素都有对用的顺序索引。允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List一些常规的方法
public static void main(String[] args) {
List cc = new ArrayList();
cc.add("我i你");
cc.add("22");
cc.add("33");
System.out.println(cc);
cc.add(1,"插入");
System.out.println(cc);
for (int i = 0;i<cc.size();i++)
{
// 特有遍历方式
System.out.println(cc.get(i));
}
// 删除第三个元素
cc.remove(2);
System.out.println(cc);
// 返回指定元素的索引值
// 判断标准时equals返回true
System.out.println(cc.indexOf(new String("插入")));
// 替换元素
cc.set(1,new String("替换"));
System.out.println(cc);
// 截取子集
System.out.println(cc.subList(1,2));
}
}
结果:
[我i你, 22, 33]
[我i你, 插入, 22, 33]
我i你
插入
22
33
[我i你, 插入, 33]
1
[我i你, 替换, 33]
[替换]
当程序试图删除一个对象O时,会调用equals与集合元素进行对比,返回true就会删除该元素,所以当我们把equals默认为true时,每执行一次删除都会删除第一个元素
class O{
public boolean equals(Object obj)
{
return true;
}
}
public class A3 {
public static void main(String[] args) {
List books = new ArrayList();
books.add("第一");
books.add("第二");
books.add("第三");
System.out.println(books);
books.remove(new O());
System.out.println(books);
books.remove(new O());
System.out.println(books);
}
}
[第一, 第二, 第三]
[第二, 第三]
[第三]
迭代器 (iterator接口)
public static void main(String[] args) {
String[] books = {"第一","第二"};
List bookList = new ArrayList();
for (int i = 0;i<books.length;i++)
{
bookList.add(books[i]);
}
ListIterator lit = bookList.listIterator();
while (lit.hasNext())
{
System.out.println(lit.next());
lit.add("---------------------");
}
System.out.println("=========迭代=======");
while (lit.hasPrevious())
{
System.out.println(lit.previous());
}
}
第一
第二
=========迭代=======
---------------------
第二
---------------------
第一
Arraylist和Vector
- Vector是个古老的集合,附带一些古老方法而且缺点很多,不建议使用
- 两个集合都有一个capacity属性。默认自动增长,可以自行设置从而提高性能
- ArrayList线程不安全,超过一条线程就必须手动保持集合的同步性,Vector不需要保证 ,但是性能ArrayList好很多
- 即使需要保证线程安全,还是推荐使用ArrayList,Collections工具类可以保证线程安全.
固定长度的List
public static void main(String[] args) {
List fixedList = Arrays.asList("第一","第二");
//获取fixedList的实现类, 输出
System.out.println(fixedList.getClass());
//遍历
for (int i =0;i<fixedList.size();i++)
{
System.out.println(fixedList.get(i));
}
}
结果:
class java.util.Arrays$ArrayList
第一
第二
此工具类不能添加删除等修改长度的操作,可以执行遍历、修改等操作。
总结
- 需要遍历List集合时,对于ArrayList、Vector集合,应使用随机访问get方法,性能更优,对于LinkedList,应使用迭代器(Iterator)来遍历。
- 如需经常插入、删除等操作的,应使用LinkedList集合。
- 如有多线程同时访问,应考虑使用Vector