List

来源:互联网 发布:国联期货数据导出 编辑:程序博客网 时间:2024/05/21 04:19
/* 集合:集合是存储对象数据的集合容器。集合比数组的优势:    1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。    2. 集合的长度是会发生变化的,数组的长度是固定的。-------| Collection  单例集合的跟接口。  ----------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 ----------| Set   如果是实现了Set接口的集合类,具备特点: 无序,不可重复。Collection接口中的方法:    增加        add(E e)  添加成功返回true,添加 失败返回false.        addAll(Collection c)  把一个集合 的元素添加到另外一个集合中去。    删除        clear()         remove(Object o)         removeAll(Collection  c)         retainAll(Collection  c)     查看        size()     判断        isEmpty()         contains(Object o)         containsAll(Collection<?> c)     迭代        toArray()         iterator()  */public class Demo2 {    public static void main(String[] args) {        Collection c = new ArrayList();        c.add("令计划");        c.add("徐才厚");        c.add("周永康");        System.out.println("添加成功吗?"+c.add("郭美美"));        //创建集合        Collection c2 = new ArrayList();        c2.add("徐才厚");        c2.add("郭美美");        c2.add("狗娃");        /*        c.addAll(c2); // 把c2的元素的添加到c集合 中去。        */        /*         删除方法:        c.clear(); //clear()清空集合中的元素        System.out.println("删除成功吗?"+c.remove("美美"));  // remove 指定集合中的元素删除,删除成功返回true,删除失败返回false.        c.removeAll(c2); //删除c集合中与c2的交集元素。        c.retainAll(c2); //保留c集合与c2的交集元素,其他的元素一并删除。        */        System.out.println("查看元素个数:"+c.size());        System.out.println("集合的元素:"+ c);    }}
/*集合的体系:----------| Collection  单列集合的根接口----------------| List 如果实现了List接口的集合类,具备的特点: 有序,可重复。--------------------| ArrayList   ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢。什么时候使用ArrayList: 如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。  比如 :高校的 图书馆--------------------| LinkedList   LinkedList底层是使用了链表数据结构实现的,  特点: 查询速度慢,增删快。--------------------| Vector(了解即可)----------------| Set  如果实现了Set接口的集合类, 具备的特点: 无序,不可重复。Linkedlist特有的方法:    1:方法介绍                addFirst(E e)                 addLast(E e)                 getFirst()                 getLast()                 removeFirst()                 removeLast()     2:数据结构                1:栈 (1.6)  : 主要是用于实现堆栈数据结构的存储方式。                    先进后出                    push()                     pop()                2:队列(双端队列1.5): 主要是为了让你们可以使用LinkedList模拟队列数据结构的存储方式。                    先进先出                    offer()                    poll()    3:返回逆序的迭代器对象                  descendingIterator()   返回逆序的迭代器对象*/public class Demo8 {    public static void main(String[] args) {        LinkedList list= new LinkedList();        list.add("张三");        list.add("李四");        list.add("王五");/*        list.addFirst("狗娃"); //把元素添加到集合的首位置上。        list.addLast("狗剩");  //把元素添加到集合的末尾处。        System.out.println("获取集合中首位置的元素:"+list.getFirst());        System.out.println("获取集合中末尾的元素:"+ list.getLast());        System.out.println("删除集合中的首位置元素并返回:"+ list.removeFirst());        System.out.println("删除集合中的末尾素并返回:"+ list.removeLast());        list.push("狗娃");   //将该元素插入此集合的开头处。         System.out.println("删除集合的首元素:"+list.pop()); // 移除并返回集合中的第一个元素         list.offer("狗剩");        System.out.println("删除集合的首元素: "+list.poll());        System.out.println("集合中的元素:"+ list);        */          Iterator  it = list.descendingIterator();        while(it.hasNext()){            System.out.println(it.next());        }    }}
/*1:栈 (1.6)  : 主要是用于实现堆栈数据结构的存储方式。    先进后出    push()     pop()2:队列(双端队列1.5): 主要是为了让你们可以使用LinkedList模拟队列数据结构的存储方式。    先进先出    offer()    poll()机试题目: 使用LinkedList实现堆栈数据结构的存储方式与队列的数据结构存储方式。    */// 使用LinkedList模拟堆栈的数据结构存储方式class StackList{    LinkedList list;    public StackList(){        list = new LinkedList();    }    //进栈    public void add(Object o){        list.push(o);    }    //弹栈 : 把元素删除并返回。    public Object pop(){        return list.pop();    }     //获取元素个数    public int size(){        return list.size();    }}//使用LinkedList模拟队列的存储方式class TeamList{    LinkedList list;    public TeamList(){        list = new LinkedList();    }    public void add(Object o){        list.offer(o);    }    public Object remove(){        return list.poll();    }    //获取元素个数    public int size(){        return list.size();    }}public class Demo9 {    public static void main(String[] args) {        TeamList list=  new TeamList();        list.add("李嘉诚");        list.add("马云");        list.add("王健林");        int size = list.size();        for(int i = 0 ; i<size ; i++){            System.out.println(list.remove());        }    }}

vector与ArrayList

/*集合 的体系:------------| Collection 单例集合的根接口----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 -------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。-------------------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。----------------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。笔试题: 说出ArrayList与Vector的区别?    相同点: ArrayList与Vector底层都是使用了Object数组实现的。    不同点:         1. ArrayList是线程不同步的,操作效率高。            Vector是线程同步的,操作效率低。        2. ArrayList是JDK1.2出现,Vector是jdk1.0的时候出现的。*/public class Demo1 {    public static void main(String[] args) {        Vector v  =  new Vector();        //添加元素        v.addElement("张三");        v.addElement("李四");        v.addElement("王五");        //迭代该集合        Enumeration e = v.elements(); //获取迭代器        while(e.hasMoreElements()){            System.out.println(e.nextElement());        }    }}

案例:扑克牌洗牌

/*需求: 使用LinkedList存储一副扑克牌,然后实现洗牌功能。*///扑克类class Poker{    String  color; //花色    String num; //点数    public Poker(String color, String num) {        super();        this.color = color;        this.num = num;    }    @Override    public String toString() {        return "{"+color+num+"}";    }}public class Demo2 {    public static void main(String[] args) {        LinkedList pokers = createPoker();        shufflePoker(pokers);        showPoker(pokers);    }    //洗牌的功能    public static void shufflePoker(LinkedList pokers){        //创建随机数对象        Random random = new Random();        for(int i = 0 ; i <100; i++){             //随机产生两个索引值            int index1 = random.nextInt(pokers.size());            int index2 = random.nextInt(pokers.size());            //根据索引值取出两张牌,然后交换两张牌的顺序            Poker poker1 = (Poker) pokers.get(index1);            Poker poker2 = (Poker) pokers.get(index2);            pokers.set(index1, poker2);            pokers.set(index2, poker1);        }    }    //显示扑克牌    public static void showPoker(LinkedList pokers){        for(int i = 0 ; i<pokers.size() ; i++){            System.out.print(pokers.get(i));            //换行            if(i%10==9){                System.out.println();            }        }    }    //生成扑克牌的方法    public static LinkedList createPoker(){        //该集合用于存储扑克对象。        LinkedList list = new LinkedList();             //定义数组存储所有的花色与点数        String[] colors = {"黑桃","红桃","梅花","方块"};        String[] nums = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};        for(int i = 0 ; i < nums.length ; i++){            for(int j = 0 ; j<colors.length ; j++){                list.add(new Poker(colors[j], nums[i]));            }        }        return list;    }}
0 0