List集合是有序的,可重复的元素。里面每个元素都有索引,通过索引访问元素。
List接口是Colletion的子接口,自然可以用里面的方法。额外的增加了通过索引访问集合元素的方法。如下
package Test01; import java.util.ArrayList; import java.util.List; public class TestList { public static void main(String[] args) { List l =new ArrayList(); List m =new ArrayList(); m.add(new String("新的集合元素")); l.add(new String("eee")); l.add(new String("qqq")); System.out.println("第一次"+l); l.add(1, new String("啦啦啦")); //在指定索引处添加元素 l.add(2, new String("啦啦啦")); System.out.println("第二次"+l); for(int i=0;i<l.size();i++) { System.out.println("每个元素分别为"+l.get(i)); } l.remove(0); //删除指定Index l.subList(0, 1); l.addAll(m); System.out.println(l); System.out.println(l.indexOf(new String("啦啦啦"))); System.out.println(l.lastIndexOf(new String("啦啦啦"))); } }
上面的常见的
还有void sort(Comparator comparator); 将Comparator规则给List排序
void replaceAll(UnaryOperation operator)重新用operator计算规则给List排序
那类比得,List判断集合元素相等的条件是什么呢?equals返回true
以下例子重写了equals,看看得出什么结论
package Test01; import java.util.ArrayList; import java.util.List; class A{ @Override public boolean equals(Object obj) { // TODO Auto-generated method stub return true; } } public class TestList { public static void main(String[] args) { List l =new ArrayList(); l.add(new String("eee")); l.add(new String("qqq")); System.out.println("删除前"+l); l.remove(new A()); System.out.println("删除后"+l); } }
List集合试图删除一个A对象,竟然删除了第一个元素。因为打算删除A时,调用了equals方法,和集合里的其他元素比较,返回true,就删除那个元素。
与Set集合不同只提供了一个Iterator(),List集合还额外提供了listIterator()增加反向迭代。
举例
package Test01; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; class A{ @Override public boolean equals(Object obj) { // TODO Auto-generated method stub return true; } } public class TestList{ public static void main(String[] args) { List l =new ArrayList(); l.add(new String("eee")); l.add(new String("qqq")); l.add(new String("哈哈哈")); ListIterator lm = l.listIterator(); while(lm.hasNext()) { System.out.println(lm.next()); lm.add("---分隔符----"); } System.out.println(l); while (lm.hasPrevious()) { System.out.println(lm.previous()); } } }