Fork me on GitHub

Java从零开始学二十一(集合List接口)

一、List接口

List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下:
public interface List<E> extends Collection<E>

二、List接口的扩展方法

No.
方法
类型
描述
1
public void add(int index, E element)
普通
在指定位置增加元素
2
public boolean addAll(int index, Collection<? extends E> c)
普通
在指定位置增加一组元素
3
E get(int index)
普通
返回指定位置的元素
4
public int indexOf(Object o)
普通
查找指定元素的位置
5
public int lastIndexOf(Object o)
普通
从后向前查找指定元素的位置
6
public ListIterator<E> listIterator()
普通
为ListIterator接口实例化
7
public E remove(int index)
普通
按指定的位置删除元素
8
public List<E> subList(int fromIndex, int toIndex)
普通
取出集合中的子集合
9
public E set(int index, E element)
普通
替换指定位置的元素

 三、List接口的常用子类 —— ArrayList和LinkedList

ArrayList实现了长度可变的数组,在内存中分配连接的空间,遍历和随机访问元素的效率比较高
LinkedList采用链表存储方式。在插入、删除元素时效率比较高
 

四、ArrayList例子

package com.pb.demo1;

public class Person {
   private String name;
   private int age;
   
public Person() {

}

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}  
}

 

package com.pb.demo1;

import java.util.ArrayList;
import java.util.List;

public class PersonArrayListTest {

    public static void main(String[] args) {
        /*
         * 创建多个Person对象并赋值
         */
         Person p1 = new Person("张三",21);
         Person p2 = new Person("李四",22);
         Person p3 = new Person("王五",23);
         //创建ArrayList
       List<Person> personlist=new ArrayList<Person>();
       
       //为集合添加对象
       personlist.add(p1);
       personlist.add(p2);
       personlist.add(p3);
       //输出集合的长度
       System.out.println("集合长度:"+personlist.size());
       //遍历集合for循环
       for(int i=0; i<personlist.size();i++){
           System.out.println("姓名:"+personlist.get(i).getName()+"年龄:"+personlist.get(i).getAge());
       }

       //使用索引添加
       Person p4 = new Person("赵六",24);
       /*
        * 使用索引添加时必须知道长度才可以正确增加,如果添加的索引大于最后一个下标+1,
        * 编译可以通过但运行时会报错
        * 例如:如查长度为3,下标是从0开始到2,这时使用索引添加值索引可以是(0~3)都可以,但是不能是4
        */

       personlist.add(0, p4);
       //输出集合的长度
       System.out.println("集合长度:"+personlist.size());
       ////遍历集合forearch循环
       for (Person p : personlist) {
           System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
    }
       
       //查找集合中是否有p4对象true代表有,false代表没有
       System.out.println("查找集合中是否有p4对象:"+personlist.contains(p4));
       //p2元素所在的下标从前向后
    System.out.println("p2元素所在的下标从前向后:"+ personlist.indexOf(p2));
    //p2元素所在的下标从后向前
    System.out.println("p2元素所在的下标从后向前:"+ personlist.lastIndexOf(p2));
       
    }

}

五、LinkedList例子

 

package com.pb.demo1;

import java.util.LinkedList;
import java.util.List;

public class PersonLinkedListTest {

    public static void main(String[] args) {
        /*
         * 创建多个Person对象并赋值
         */
         Person p1 = new Person("张三",21);
         Person p2 = new Person("李四",22);
         Person p3 = new Person("王五",23);
         Person p4 = new Person("赵六",24);
         Person p5 = new Person("钱七",25);
         
         //创建LinkedList
         LinkedList<Person>plist=new LinkedList<Person>();
         plist.add(p1);
         plist.add(p2);
         plist.add(p3);
         //集合长度
         System.out.println("集合长度"+plist.size());
         //遍历集合
         for (Person p : plist) {
             System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        }
        //在第一个和最后一个添加对象
         plist.addFirst(p4);
         plist.addLast(p5);
         System.out.println("===========添加数据=================");
         //集合长度
         System.out.println("集合长度"+plist.size());
         //遍历集合
         for (Person p : plist) {
             System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        }
      
         //获取指定下标的元素:下标要已经存在如果不存在运行后将报错
         System.out.println("获取指定下标的元素:"+plist.get(4).getName());
         System.out.println("===========按下标移除=================");
         //移除元素remove,按下标移除
         plist.remove(0);
        //集合长度
         System.out.println("集合长度"+plist.size());
         //遍历集合
         for (Person p : plist) {
             System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        }
         System.out.println("===========直接移除对象=================");
         //移除元素remove 直接移除对象,
         plist.remove(p2);
        //集合长度
         System.out.println("集合长度"+plist.size());
         //遍历集合
         for (Person p : plist) {
             System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        }
         System.out.println("===========移除第一个或者最后一个=================");
         //移除元素移除第一个或者最后一个
         plist.removeFirst();
         plist.removeLast();
        //集合长度
         System.out.println("集合长度"+plist.size());
         //遍历集合
         for (Person p : plist) {
             System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        }
         System.out.println("===========移除全部=================");
         //移除全部元素clear方法
         plist.clear();
        //集合长度
         System.out.println("集合长度"+plist.size());
         //遍历集合
         for (Person p : plist) {
             System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        }
         
    }

}

六、Vector类

在List接口中还有一个子类:Vector,Vector类属于一个挽救的子类,从整个JAVA的集合发展历史来看,Vector算是一个元老级的类,在JDK 1.0的时候就已经存在类此类。但是到了JAVA 2(JDK 1.2)之后重点强调了集合框架的概念,所以先后定义了很多的新接口(如:List等),但是考虑到一大部分的人已经习惯了使用Vector类,所以JAVA的设计者,就让Vector类多实现了一个List接口,这才将其保留下来。但是因为其是List子类,所以Vector类的使用与之前的并没有太大的区别。
package com.pb.demo1;

import java.util.Vector;

public class VectorTest {

    public static void main(String[] args) {
        
        Vector<String> plist=new Vector<String>();
        
        plist.add("张三");
        plist.add("李四");
        plist.add("王五");
        plist.add("赵六");
        System.out.println("长度:"+plist.size());
        for (String s : plist) {
            System.out.println(s);
        }

    }

}

 

posted @ 2015-02-25 22:51  森林森  阅读(1694)  评论(0编辑  收藏  举报