1,集合概述
(1)集合的由来
Java是面向对象的语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们必须把多个对象进行存储。已有的容器类型有:数组和StringBuffer。但是,StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的,此时,为了适应变化的需求,Java就提供了集合类。
(2)数组和集合区别
1)长度区别
数组的长度固定;集合长度可变
2)内容不同
数组存储的是同一种类型的元素;集合可以存储不同类型的元素
3)元素的数据类型问题
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用类型。
(3)集合的分类
存储多个元素会有不同的需求,针对这些不同的需求,Java就提供了不同的集合类。下边列出了常用的集合类别:
Collection概述:它是Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。
集合所用的迭代器是Iterator,具体用法:Iterator it = c.iterator(); 其中c表示集合对象
List概述:它的类型也是接口,称为有序的collection(也称为序列)(注意:这里所说的集合不是说List集合中元素从小到大或者从大到小排列,而是说,元素“出”集合的顺序和“进”集合的顺序是一样的)。使用此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素;与set不同,列表List通常允许重复的元素。
二、集合类框架
注明:实线表示继承,虚线表示接口
三、代码
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
/**
* @param args
*/
public static void main(String[] args) {
Collection coll = new ArrayList();
// show(coll);
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
show(c1,c2);
}
public static void show(Collection c1,Collection c2){
//给c1添加元素。
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
//给c2添加元素。
c2.add("abc1");
c2.add("abc2");
c2.add("abc3");
c2.add("abc4");
c2.add("abc5");
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
//演示addAll
// c1.addAll(c2);//将c2中的元素添加到c1中。
//演示removeAll
// boolean b = c1.removeAll(c2);//将两个集合中的相同元素从调用removeAll的集合中删除。
// System.out.println("removeAll:"+b);
//演示containsAll
// boolean b = c1.containsAll(c2);
// System.out.println("containsAll:"+b);
//演示retainAll
boolean b = c1.retainAll(c2);//取交集,保留和指定的集合相同的元素,而删除不同的元素。
//和removeAll功能相反 。
System.out.println("retainAll:"+b);
System.out.println("c1:"+c1);
}
public static void show(Collection coll){
//1,添加元素。add.
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
System.out.println(coll);
//2,删除元素。remove
// coll.remove("abc2");//会改变集合的长度
//清空集合.
// coll.clear();
System.out.println(coll.contains("abc3"));
System.out.println(coll);
}
}
四、疑问点:java中,数组既可以存放基本数据类型,又可以存放对象。为什么集合中存放的就必须是对象?
答:集合里只能存放引用类型,若要存放基本类型只能存相对应的包装类原因是因为集合是泛型类,会有边界擦除,若在<>里指定类型就保留到你指定的类的信息,若不指定就为Object类,基本类型自动转为相应的包装类存放所以你只要在里面试一下就会发现不指定类型的话除Object中有的方法外别的方法都不能用指定为一个父类(或接口)的话,即使你存放进去的是子类却也用不了子类的方法(除非强转)等 。