List 作为 Collection 的子接口,当然可以使用Collection 接口里的全部方法。而且由于 List 是有序集合,因此 List 集合里增加了一些根据索引来操作集合元素的方法。List 是线程不安全的
》ArrayList
ArrayList 作为 List 接口的实现类,存储的是一组不唯一,有序的(插入顺序)的对象,ArrayList 实现了长度可变的数组,在内存中分配连续空间。遍历元素 和随机访问元素效率比较高。
public static void main(String[] args) { //创建 List 对象 List list =new ArrayList(); //添加元素 list.add(new String("小红")); list.add(new String("小明")); list.add(new String("小兰")); list.add(new String("小花")); //将元素插入到指定的位置 下标从0开始 //list.add(2, new String("小花")); //返回指定元素在集合中第一次出现的索引 System.out.println(list.indexOf("小花")); //输出 2 //返回指定元素在集合中最后一次出现的索引 System.out.println(list.lastIndexOf("小花")); //输出 4 //将指定索引的元素替换成新元素,返回被替换的旧元素 System.out.println(list.set(3, "小雪")); //返回从索引1(包含)到索引3(不包含)处所有集合元素组成的子集合。 System.out.println(list.subList(1, 3)); //删除指定位置的元素,也可以按照对象删除 list.remove(1); //遍历集合,拿到集合中的元素 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } //使用 iterator 迭代集合 Iterator lit=list.iterator(); while(lit.hasNext()){ System.out.println(lit.next()); } }
》LinkedList
LinkedList 类也是 List 接口的实现类,也实现了 List 的优点,可以根据索引来随机访问集合中的元素。LinkedList是以链表形式存储数据的。插入、删除元素时效率比较高。除此之外,LinkedList 还实现了 Deque接口,可以被当成双端队列来使用,用词即可以被当成 “栈” 来使用,也可以当成队列使用。
public static void main(String[] args) { LinkedList list=new LinkedList(); list.add(new String("小红")); list.add(new String("小明")); list.add(new String("小兰")); list.add(new String("小花")); list.addFirst("张无忌"); //在列表首部添加元素 list.addLast("小鱼儿"); //在列表尾部添加元素 System.out.println(list.getFirst()); //返回列表的第一个元素 System.out.println(list.getLast()); //返回列表的最后一个元素 System.out.println(list.removeFirst()); //删除并返回列表中的第一个元素 System.out.println(list.removeLast()); //删除并返回列表的最后一个元素 }