Java 集合3 集合的使用

集合的使用细节
1.集合中存储的都是对象的地址(对象的引用)

2.对象是否可以存储基本数据类型? 不能存储基本数据类型,但是在JDK1.5 版本以后可以这样写,但是存储的还是对象(基本数据包装类的对象)

     co.add(2);//class 文件中是这样写的:  co.add(Integer.valueOf(3));  数值转化为对象,在1.5版本后出现了自动装箱

3.在对象存入集合时,对象都被提升为了Object 。取出时要使用元素的特有方法要进行向下类型转化
集合添加元素的方法为: boolean add(E e) 参数列表中的参数类型是 Object

package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

//集合的使用细节
public class CollectionDemo2 {
    public static void main(String[] args){
        Collection co = new ArrayList();
        //1.集合中存储的都是对象的地址(对象的引用)
        co.add("hduw");

        //2.对象是否可以存储基本数据类型?  不能存储基本数据类型,但是在JDK1.5 版本以后可以这样写,但是存储的还是对象(基本数据包装类的对象)
        co.add(2);//在class 文件中是这样写的:  co.add(Integer.valueOf(3));  数值转化为对象,在1.5版本后出现了自动装箱
        //3.在对象存入集合时,对象都被提升为了Object 。去除是要使用元素的特有方法要进行向下类型转化
        co.add("dhiwh");
        co.add("dwud");
        for(Iterator it = co.iterator();it.hasNext();){
            Object object = it.next();
            String str = (String )object;
           // String str =(String ) it.next();
            System.out.println(str+" "+str.length());
        }
        System.out.println(co);
    }
}

集合在开发中的具体使用
CollectionTest :存储自定义的学生对象

package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

//集合的使用练习:存储学生对象
class Student {
    private int age ;
    private String name;

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name+"  "+this.age ;
    }
}
public class CollectionTest {
    public static void main(String[] args){
        //利用集合存储学生对象
        //1.创建集合
        Collection coll = new ArrayList();
        //2.存储对象
        Student stu = new Student("Lihua",22);
        coll.add(stu);
        coll.add(stu);
        coll.add(new Student("Zhangshan",23));
        coll.add(new Student("Lisi",20));
        coll.add(new Student("Lisi",20));
        //3.获取对象
        for(Iterator it = coll.iterator();it.hasNext();){
            //进行向下转化,使用元素的特有方法
            Student st = (Student)it.next();
            st.toString();
        }
    }
}

基本练习后,集合练习,阐述集合的一个重要概念:重复
在了解Collection 时,知道有些集合中可以有重复元素,有些集合中不允许出现重复数据,那么什么是重复呢?
集合中的元素重复
首先集合中存储的是对象,集合判断对象是否重复的依据是:equals() ;
任何类都有equals 这个方法(任何类都继承 Object ),而集合判断对象是否是一样的依据就是这个类的equals 方法。可以保持原本的从Object (父类) 继承的 equals 规则,但是更多的时候我们要自己定义自定义类的equals 方法,就是重写 equals 方法。建立自己的判断规则

练习的例子中:

coll.add(stu);
coll.add(stu);//这两个元素是重复的
coll.add(new Student("Lisi",20));
coll.add(new Student("Lisi",20));//这两个元素不是重复的

根据的是 继承的 Object 中的equals 方法所定义的比较规则

自定义Student 的比较规则后(重写equals 方法)

public boolean equals(Object obj) {
        if(this==obj)
            return true;
        else{
            if(!(obj instanceof Student)){
                throw new ClassCastException("类型错误!");
            }
            Student stu = (Student)obj;
            return this.name.equals(stu.name)&&this.age ==stu.age;
        }
    }

此时: 定义的对象相等规则为 同地址或者是同名同姓

coll.add(new Student("Lisi",20));
coll.add(new Student("Lisi",20));//这两个元素也是重复的

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/82316345