集合的介绍
上篇文章介绍了java.util包中几个常用的类,有Date类,Calendar类,Random类,接下来介绍java.util包中的集合。java.util包中的集合我主要介绍四种,分别是:ArrayList类,LinkedList类,Vector类,HashMap类。该HashMap类其实也不能说它是集合,我在后面会讲到。首先我们要明白集合中存放的内容是什么,集合中存放的内容只能是引用型数据,不能存放原始型数据,如果你想存放原始型数据的话,必须得将原始型数据转换为引用型数据,即转换成相应的包装类对象。集合中可以存放集合,集合中还可以存放类,例如:ArrayList list=new ArrayList();list.add(ArrayList类型对象)或者list.add(Student类的对象).
集合是将多个元素组成一个单元的对象,它类似于数组,但数组有个最大的缺点是长度受到限制(一经创建就无法更改),并且数组只能存放数据类型相同的数据。而集合的长度没有限制,可以存放任意多的元素,而且元素的数据类型也可以不一样。集合还提供了一些操作数据的方法,例如检索,存储。
ArrayList类
ArrayList是长度可变的对象引用数组,称为动态数组,随着元素的增加,元素数目的增大,数组容量也随着自动扩展。访问和遍历数组元素时,ArrayList的性能比较优越。ArrayList类继承了AbstractList类,实现了List接口。
ArrayList的构造方法有3中重载方式
1.ArrayList() 创建一个空的ArrayList对象
2.ArrayList(Collection c) 根据指定的集合创建ArrayList对象
3.ArrayList(int initialCapacity) 使用给定的大小创建一个ArrayList对象
ArrayList的常用方法
1.int size() 返回ArrayList对象的大小,即元素的数量
2.boolean isEmpty() 判断ArrayList对象是否为空,为空返回true,否则返回false
3.void clear() 情况ArrayList对象中的所有元素
4.boolean add(Object obj) 向ArrayList对象中添加一个元素,该元素可以是任意类的对象
5.Object remove(int index) 删除ArrayList对象中指定索引位置的元素
6.Object get(int index) 返回ArrayList对象中指定索引位置的元素
7.Object set(int index,Object elem) 将元素elem赋给index索引上
8.int indexOf(Object element) 判断元素element是否在ArrayList对象中是否存在,存在的话返回该元素所在位置的索引,不存在的话返回-1
代码展示:
ArrayList list=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list.size());//注意list.size()为list对象中元素的个数,而数组中.length为空间大小
//在list中指定的索引位置添加新的元素ddd
list.add(4,"ddd");
System.out.println(list.indexOf("ddd"));//该元素ddd在list存在,则返回索引,该句返回4,如果不存在,则返回-1
ArrayList list=new ArrayList();
list.add("aaa");
list.add(new Student());//ArrayList对象还可以存放一个类的对象
list.add("ccc");
//打印出list中存放的所有数据
for(int i=0;i<list.size();i++){
Object o=list.get(i);//list.get(i)方法返回的类型是Object
System.out.println(o);
}
//总结:一个ArrayList对象中最好存放同一种类型的数据
之前我们讲过ArrayList中不能存放原始型数据,但是在java的jdk1.5之后,我们可以直接添加原始型数据,但并不是说ArrayList可以存放原始型数据,而是说当我们向ArrayList对象中添加一个原始型数据的时候,虚拟机会为我们自动将原始型数据转换为引用型数据,例如如下代码:
list.add(1);//等价于list.add(new Integer(1))
list.add(12.4);//等价于list.add(new Double(12.4))
大家可以看到我们之前new一个ArrayList对象都是ArrayLIst list=new ArrayList()来new 对象的,但是我们会发现在myeclipse中ArrayList下会有一个黄色的下划线,这是一个警告,消除警告的方法是我们将要用到泛型,为什么我们要用到泛型呢?因为上面我们提到一个ArrayList对象中最好是存放相同数据类型的数据,泛型的作用就是规定ArrayList存放的数据类型,不过泛型的使用只能是在java的jdk1.5以上,所以我们要new一个ArrayList对象的正确方法是:ArrayList<类型> list=new ArrayList<类型>()。既然提到泛型的话,我们就来讲讲泛型的原理,其实泛型的原理类似于我们在C语言中的宏定义,我们先来回顾一个C语言的宏定义:
#include <stdio.h>
#define M 2+3 //宏定义
int main(void){
printf("%d\n",M*2); //这里输出的数据是8
return 0;
}
而在java中,与该宏定义类似,代码为:
public class Demo<E,T>{
private E num1;
//num1的set和get方法省略
private T num2;
//num2的set和get方法省略
}
在Test类中的main函数中:
Demo<String ,Integer> d=new Demo<String,Integer>();
d.setNum1("aaa");
d.setNum2(22);
了解了泛型之后呢,我们又回到ArrayList,为了更清楚的了解ArrayList的用法,我们接下来写一个自己的ArrayList,该ArrayList与java为我们提供的ArrayList是一样的,我们根据java为我们提供的ArrayLIst深入底层,看看到底ArrayList到底如何实现长度不限,存放的数据类型可以不一样的功能。
写一个自己的ArrayList:MyArrayList类,代码如下:
今天就先写到这啦,睡觉觉。