集合框架-List

List:

    1.是有序的,存入的顺序和取出的顺序一致。

    2.元素是有索引的。

    3.元素可以重复。

 

了解List接口的特有方法,注意:这些特有方法都是围绕着角标定义的

    1.add(index,element);

    2.remove(index):

    3.set(index,element);

    4.get(index);


package cn.itcast.p5.list;
 
import java.util.ArrayList;
import java.util.List;
 
 
 
public class ListDemo {
     
    /**
     * @param args
     */
    public static void main(String[] args) {
    //创建list集合的对象。
    List list = new ArrayList();
    listDemo(list);
    }
    /*
     * 演示List接口。
     */
    public static void listDemo(List list){
        //1,添加元素。
        list.add("abc3");
        list.add("abc9");
        list.add("abc1");
        list.add("abc4");
        //2,指定位置增加元素。
        //list.add(2,"abc2");
        //3,删除指定角标元素。
        //list.remove(4);
        //4,修改指定位置的元素。
        //list.set(2,"abc77");
        //5,获取指定位置的元素。
        System.out.println(list.get(1));
        System.out.println(list);
    }
 
}
 
 
 
package cn.itcast.p5.list;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class ListDemo2 {
 
    public static void main(String[] args) {
     
        /*
         * 取出list中的所有元素。
         * 
         */
        List list = new ArrayList();
        list.add("abc1");
        list.add("abc3");
        list.add("abc2");
        list.add("abc6");
        
        //for(Iterator it = list.iterator(); it.hasNext(); ){
            //System.out.println(it.next());
        //}
        
        //List特有的取出所有元素的方式。
        for (int i = 0; i < list.size(); i++) {
            System.out.println("get("+i+"):"+list.get(i));
            


/*
 * 列表迭代器是List集合的特有迭代器,可以在迭代过程中实现增删改查。
 */  
            
        ListIterator it = list.listIterator();
        while(it.hasNext()){
            Object obj = it.next();
          //如果用Iterateror()会有ConcurrentModificationException不能在迭代过程实现增删
            if(obj.equals("abc2")){
                 //list.add("abc9");
                  it.add("abc9");
            }
        }
   }
}

List接口支持

 

List

    |--Vector:数组结构的,是同步的。被ArrayList替代,因为效率低。

 

    |--ArrayList:数据结构是数组结构,是不同步的。查询速度很快。


    |--LinkedList:数据结构是链表结构,是不同步的。增删速度很快


ArrayList存储自定义对象

  ArrayList查询速度快,最为常用的集合之一,使用集合的时候,查询的功能用的多。

package cn.itcast.p7.arraylist;
 
import java.util.ArrayList;
import java.util.Iterator;
 
import cn.itcast.bean.Person;
 
public class ArrayListDemo {
    public static void main(String[] args) {
        //创建一个ArrayList集合对象。
        ArrayList al = new ArrayList();
        //添加Person对象,到集合中,其实集合中记录是对象的引用。
        al.add(new Person("lisi1",21));//add(Object obj)
        al.add(new Person("lisi6",26));
        al.add(new Person("lisi2",22));
        al.add(new Person("lisi7",27));
        //取出所有Person对象。
        for (Iterator it = al.iterator(); it.hasNext();) {
               //System.out.println(it.next());
               //调用了Object的toString()方法可以在Person中重载
         
        Person p = (Person)it.next();//取元素时,要强转才可以使用子类特有方法。
        System.out.println(p.getName()+","+p.getAge());
        }
    }
}


LinkedList特有方法

package cn.itcast.p8.linkedlist;
import java.util.LinkedList; 
public class LinkedListDemo {
    public static void main(String[] args) {
        /*
         * LinkedList特有。
         * 
         * addFirst();
         * addLast();
         * 
         * getFirst();
         * getLast();
         * 
         * removeFirst();
         * removeLast();
         */
        //创建一个链表对象。
        LinkedList link = new LinkedList();
        link.addFirst("abc1");
        link.addFirst("abc2");
        link.addFirst("abc3");
        link.addFirst("abc4");
        //System.out.println(link.removeFirst());
        //System.out.println(link.removeFirst());
        //System.out.println(link.getFirst());
        //System.out.println(link.getFirst());
        //System.out.println(link);
        while(!link.isEmpty()){
            System.out.println("link:"+link.removeLast());
        }
    }
}


LinkedList模拟堆栈结构

LinkedList:数据结构是链表结构,是不同步的。增删速度很快

/**用LinkedList模拟堆栈或者队列数据结构。*/

//描述一个具备先进后出的数据结构堆栈。  
class MyStack{
    private LinkedList link;
    MyStack(){
        link = new LinkedList();
    }
    /**
     * 提供一个存储元素的方法。
     */
    public void myAdd(Object obj){
        link.addLast(obj);
    }
    /**
     *  提供一个获取元素的方法。
     */
    public Object myGet(){
        return link.removeLast();
    }
    /**
     * 判断容器中是否有元素。
     */
    public boolean isNull(){
        return link.isEmpty();
    }
}    

package cn.itcast.p8.linkedlist;
import java.util.LinkedList;
public class LinkedListTest {
    public static void main(String[] args) {
        //创建一个自定义个堆栈容器。
        MyStack stack = new MyStack();
        stack.myAdd("abc1");
        stack.myAdd("abc2");
        stack.myAdd("abc3");
        stack.myAdd("abc4");
        stack.myAdd("abc5");
        while(!stack.isNull()){
            System.out.println(stack.myGet());
        }
    }
}


集合List练习

定义功能,去除ArrayList集合中的重复元素。

//第一种方式
public static List getSingleElement(List list){
    //1,创建一个新的容器。
    List temp = new ArrayList();
    //2,遍历已有集合中的元素。并将其存储到新的集合中,在存储时进行判断。新容器中是否包含该元素。
    for(Iterator it = list.iterator(); it.hasNext(); ){
        Object obj = it.next();
        if(!temp.contains(obj)){
            temp.add(obj);
        }
    }
    return temp;
}

//第二种方式。
public static void getSoingleElmement2(List list){
    for(int x=0; x<list.size(); x++){
        Object obj = list.get(x);
        for(int y=x+1; y<list.size(); y++){
            if(obj.equals(list.get(y))){
                list.remove(y);
                y--;
            }
        }
    }
}