集合(二)

来源:互联网 发布:护理专业网络教育 编辑:程序博客网 时间:2024/05/21 10:27

集合第二部分 List

List的3个儿子存储字符串和自定义对象并遍历代码演示


1.List的3个儿子(掌握)
     (1)List

        |--ArrayList
            底层数据结构是数组,查询快,增删慢.
            线程不安全,效率高
        |--Vector
            底层数据结构是数组,查询快,增删慢.
            线程安全,效率低
        |--LinkedList
            底层数据结构是链表,查询慢,增删快.
            线程不安全,效率高

        刘意老师总结:什么时候用谁?
            线程安全:
                是:Vector
                否:ArrayList,LinkedList
                    查询多:ArrayList
                    增删多:LinkedList

        如果你什么都不懂,就用ArrayList。

    加入泛型,并遍历。
    (2)ArrayList存储字符串和自定义对象并遍历。

//自定义类Studentclass Student{    //姓名    private String name;    //年龄    private int age;    //无参构造    public Student(){    }    //带参构造    public Student(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;    }}




import java.util.*;/* *需求:ArrayList存储字符串和自定义对象并遍历,加入泛型,并遍历 */class ArrayListTest{    public static void main(String[] args)    {        //创建集合对象并使用泛型        ArrayList<Student> array  = new ArrayList<Student>();        //创建元素对象并给值        Student stu1 = new Student("zhangsan",20);        Student stu2 = new Student("lisi",25);        Student stu3 = new Student("wangwu",26);        //把元素对象传给集合对象        array.add(stu1);        array.add(stu2);        array.add(stu3);        //遍历集合  三种方式        //方法一:迭代器 while        Iterator<Student> it = array.iterator();        while(it.hasNext()){            //因为使用了泛型所以不用强转            Student s = it.next();            System.out.println(s.getName()+"------"+s.getAge());        }        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");        //方法二:一般for循环遍历        for(int i = 0 ; i < array.size() ; i++){            Student s = array.get(i);            System.out.println(s.getName()+"--------"+s.getAge());        }        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");        //方法三:加强for循环遍历,好处减少代码量        for(Student s : array){            System.out.println(s.getName()+"--------"+s.getAge());        }    }}




import java.util.*;class ArrayTest2 {public static void main(String[] args) {//创建集合对象并使用泛型ArrayList<String> array = new ArrayList<String>();//给集合对象赋值array.add("hello");array.add("world");array.add("java");//遍历集合  三种方法//方法一:迭代器  whileIterator<String> it = array.iterator();while(it.hasNext()){//因为使用了泛型所以不需要不需要强制转换数据类型String s = it.next();System.out.println(s);}System.out.println("----------------------------------");//方法二:使用一般for循环迭代集合for(int i = 0; i < array.size(); i++){String s = array.get(i);System.out.println(s);}System.out.println("----------------------------------");//方法三:使用增强forfor(String s:array){System.out.println(s);}}}




</pre><strong>    (3)LinkedList存储字符串和自定义对象并遍历。</strong><pre name="code" class="html">import java.util.*;class LinkedListTest2{    public static void main(String[] args)    {        //创建集合对象并使用泛型        LinkedList<String> link = new LinkedList<String>();        //集合对象调add方法并赋值        link.add("hello");        link.add("world");        link.add("java");        //遍历集合---有3种方法        //方法一:迭代器        Iterator<String> it = link.iterator();        while(it.hasNext()){            String s = it.next();            System.out.println(s);        }        System.out.println("-----------------------------");        //方法二:普通for循环        for(int i = 0;i < link.size();i++){            String s = link.get(i);            System.out.println(s);        }                System.out.println("-----------------------------");        //方法三:增强for循环        for(String s : link){            System.out.println(s);        }    }}





//自定义类Studentclass Student{    //姓名    private String name;    //年龄    private int age;    //无参构造    public Student(){    }    //带参构造    public Student(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;    }}






import java.util.*;class LinkedListTest3{    public static void main(String[] args)    {        //创建集合对象并使用泛型        LinkedList<Student> link = new LinkedList<Student>();        //创建元素对象并赋值        Student stu1 = new Student("zhangsan",20);        Student stu2 = new Student("lisi",25);        Student stu3 = new Student("wangwu",26);        //把元素对象添加进集合对象中        link.add(stu1);        link.add(stu2);        link.add(stu3);        //循环遍历   三种方式        //方法一:迭代        //构建迭代器        Iterator<Student> it = link.iterator();        while(it.hasNext()){            Student s = it.next();            System.out.println(s.getName()+"**********"+s.getAge());        }        System.out.println("------------------");        //方法二:普通for循环        for(int i = 0;i < link.size();i++){            Student s = link.get(i);            System.out.println(s.getName()+"*********"+s.getAge());        }        System.out.println("------------------");        //方法三:增强for循环        for(Student s:link){            System.out.println(s.getName()+"**********"+s.getAge());        }    }}





        






    用LinkedList模拟栈数据结构。(面试题)


package cn.itcast.homework;import java.util.LinkedList;//模拟数据结构栈public class MyStack {        private LinkedList link;        public MyStack(){        link = new LinkedList();    }        //添加    public void add(Object obj){        link.addFirst(obj);    }        //获取    public Object get(){        return link.removeFirst();    }        //判断    public boolean isEmpty(){        return link.isEmpty();    }}package cn.itcast.homework;//操作MyStackpublic class MyStackTest {    /**     * @param args     */    public static void main(String[] args) {        MyStack m = new MyStack();                m.add("hello");        m.add("java");        m.add("world");                while(!m.isEmpty()){            String s = (String)m.get();            System.out.println(s);        }    }}
















    (4)Vector存储字符串和自定义对象并遍历。`

import java.util.*;class VectorTest{    public static void main(String[] args)    {        //创建集合对象        Vector<String> v = new Vector<String>();        //调用集合对象的add方法赋值        v.add("hello");        v.add("world");        v.add("java");        //遍历----三种方法        //方法一:迭代器        Iterator<String> it = v.iterator();        while(it.hasNext()){            String s = it.next();            System.out.println(s);        }        System.out.println("---------------------");        //方法二:一般for        for(int i = 0;i < v.size();i++){            String s = v.get(i);            System.out.println(s);        }        System.out.println("---------------------");        //方法三:增强for        for(String s:v){            System.out.println(s);        }    }}






import java.util.*;class VectorTest2{    public static void main(String[] args)    {        //创建集合对象并使用泛型        Vector<Student> v = new Vector<Student>();        //创建元素对象并赋值        Student stu1 = new Student("zhangsan",20);        Student stu2 = new Student("lisi",25);        Student stu3 = new Student("wangwu",24);        //把元素对象添加进集合对象中        v.add(stu1);        v.add(stu2);        v.add(stu3);        //遍历集合---三种方法        //方法一:迭代器        Iterator<Student> it = v.iterator();        while(it.hasNext()){            Student s = it.next();            System.out.println(s.getName()+"*****"+s.getAge());        }        System.out.println("---------------------------");        //方法二:一般for循环遍历        for(int i = 0;i < v.size();i++){            Student s = v.get(i);            System.out.println(s.getName()+"*****"+s.getAge());        }        System.out.println("---------------------------");        //方法三:增强for循环遍历        for(Student s:v){            System.out.println(s.getName()+"*****"+s.getAge());        }    }}




    (5)遍历的方式:
        A:迭代器
        B:增强for

        C:普通for

        增强for是用来替代迭代器的。

        如果仅仅是遍历,就用A或者B。
        如果遍历的时候,需要获取索引就用C。

2.泛型(了解)
    (1)一种特殊的数据类型,在实例化类的时候,或者调用方法的时候才明确数据的类型。
    (2)格式:

        <数据类型>
    (3)好处:
        A:将运行期间的异常提前到了编译期间
        B:避免了强制类型转换
        C:优化了程序设计
    (4)在哪里用?
        自己看API,发现类或者接口后面有<>,最好用泛型。
        一般都是在集合中用。
    (5)泛型的分类
        A:泛型类
        B:泛型方法
        C:泛型接口

4:增强for(掌握)
    (1)一种简单的遍历数组或者Collection集合的方式。
    (2)格式:

        for(数组或者Collection集合中的元素类型 变量 : 数组或者Collection集合)
        {
            使用变量即可.
        }

        注意:
            只适合遍历数据,被他用作目标的对象不能使null.

原创粉丝点击