集合的使用细节
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));//这两个元素也是重复的