集合(二)

集合第二部分 List

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


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

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

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

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

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

//自定义类Student
class 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");

		//遍历集合  三种方法
		//方法一:迭代器  while
		Iterator<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("----------------------------------");
		
		//方法三:使用增强for
		for(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);
        }
    }
}





//自定义类Student
class 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;

//操作MyStack
public 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值