1.1集合的简介
开发和学习中需要时刻和数据打交道,如何组织这些数据是我们编程中重要的内容。我们一般通过 “容器”来容纳和管理数据。事实上,数组就是一种容器,可以在其中放置对象或基本类型数据。
数组的优势:是一种简单的线性序列,可以快速的访问数组元素,通过索引获取元素效率非常高。
数组的劣势:不灵活!容量事先定义好,不能随着需求的变化而扩容,并且插入和删除操作效率非常低。
比如:我们在一个用户管理系统中,要把今天注册的所有用户取出来,那么这个用户有多少个?我们在写程序时是无法确定的。因此,也就不能使用数组。
由于数组远远不能满足我们对于“管理和组织数据的需求”,所以我们需要一种更强大、更灵活的,容量随时可扩的容器来装载我们的对象。 这就是我们今天要学习的容器或者叫集合,集合存储的数据必须是引用类型数据。(其实我个人觉得ArrayLis和Vector就是给数组披了一层皮,方便对数组进行各种操作,说快,快个锤子哦,只是不用自己动手当然好啦,白嫖才是王道,对了Vector是线程安全的,被那个很长的单词修饰(synchronized),ArrayList不是,)
ArrayList是一种常见的集合,我们可以使用ArrayList集合来管理和组织数据
试例:
// 1.创建ArrayList集合对象
ArrayList list = new ArrayList();
// 2.通过add(obj)方法,添加元素
list.add(111); // 自动装箱
list.add(222);
list.add(333);
// 3.遍历数组
// 3.1通过size()方法,获取元素个数
for(int i = 0; i < list.size(); i++) {
// 3.2通过get(index)方法,获取元素的值
System.out.println(list.get(i));
}
1.2集合的继承关系
查看ArrayList源码,我们发现它继承了抽象类 AbstractList同时又实现了接口List,而List接口又继承了Collection接口。因此,Collection接口可以说是集合的祖宗接口。
ArrayList 继承于AbstractList抽象类并实现了List接口
这说明我们在使用 ArrayList 类时,该类已经把所有抽象方法进行了重写。那么,实现 Collection接口的所有子类都会进行方法重写。
Collection接口位于java.util包中,常用的派生接口是List接口和Set接口:
(1)List常用的子类有:ArrayList类、LinkedList类、Vector类
(2)Set常用的子类有:HashSet类、LinkedHashSet类、TreeSet类
(兄弟们看下边,就这个图(网上趴的,居然没Vector,不玩了,哼))
1.3Collection接口
既然 Collection 接口是集合中的顶层接口,那么 Collection 接口中定义的方法子类都可以使用。查询API,发现 Collection 接口中很多集合的操作方法,那么这些方法都具体能做什么呢?
方法名 | 描述 |
int size(); | 容器中元素的数量。 |
boolean isEmpty(); | 容器是否为空。 |
boolean add(Object o); | 增加元素到容器中。 |
boolean addAll(Collection c); | 将容器c中所有元素增加到本容器。 |
boolean remove(Object o); | 从容器中移除元素。 |
boolean removeAll(Collection c); | 移除本容器和容器c中都包含的元素。 |
boolean retainAll(Collection c); | 取本容器和容器c中都包含的元素,移除非交集元素。 |
boolean contains(Object o); | 容器中是否包含该元素。 |
boolean containsAll(Collection c); | 本容器是否包含c容器所有元素。 |
Iterator iterator(); | 获得迭代器,用于遍历所有元素。 |
Object[] toArray(); | 把容器中元素转化成Object数组。 |
(一个一个给大家试下):
// 1.创建集合
Collection coll = new ArrayList();
// 2.往集合中添加对象元素
coll.add("111");
coll.add("222");
coll.add("333");
System.out.println(coll); // 输出:"[111, 222, 333]"
// 3.从集合中删除元素
coll.remove("111");
System.out.println(coll); // 输出:"[222, 333]"
// 4.判断集合中是否包含指定元素
System.out.println(coll.contains("222")); // 输出:true
// 5.获取集合元素个数
System.out.println(coll.size()); // 输出:2
// 6.返回包含集合中所有元素的数组
Object[] arr = coll.toArray(); // 数组中结果为:[222, 333]
// 7.清除集合元素
coll.clear(); // 清空后,集合元素为[],代表没有元素
(好啦,今天就写这么多)