作者:云都小生
总述
之前我们存储数据的方法,都是选择用数组。但是数组有一个硬伤,它只能存储固定数据类型的数据。
后来我们学习了面向对象,我们能够自己构建出新的数据类型,这样方便多了。例如Student类,我们可以封装名字、年龄、班级等等,我们需要多个Student就直接弄个对象数组。
但是如果我们想要将多个不同的对象放到一起,那怎么办?
今天,我们来学习Java给我们提供的三个更便利的东西,分别是List、Set、Map。
你可以把它们理解成三个不同的箱子,能装东西,但是它们的规则不一样。
Collection接口
通过图1我们可以看到,Set和List都继承了Collection这个接口。这个接口是最基本的集合接口,它提供了一个iterator()的方法,这个方法可以用来迭代访问Collection中的每一个元素。
Iterator it = collention.iterator();
while(it.hsaNext())
{
Object obj = it.next();
}
在第第一行中,我们获取了collention集合对象的一个迭代子。然后我们通过while对所有元素进行遍历。
所有的集合类都位于java.util包下,集合中只能保存对象。
List接口
List接口是Collection接口的子接口,List是有序的集合,能够精确的控制每个元素插入的位置。List跟数组有点类似,可以通过下标来访问List中的元素。List中允许重复元素的存在。
记住两点:
1. List是有序的集合;
2. List允许重复元素的存在。
这两个是List的特点。
Set接口
Set接口也继承了Collection接口,这个集合跟List是相反的,该集合中的元素不可重复,并且,该集合是无序即可。
记住两点
1. Set是无序的集合;
2. Set是不允许重复元素的存在
Map接口
Map接口并不从Collection接口继承,这个集合主要保存的是有映射关系的数据,也就是我们平时所说的键-值。访问时只能根据每项元素的key来访问其value。
常用集合类ArraysList
ArraysList实现了List接口,这个集合类实现了可变大小的数组。
常用集合类Stack
这个类继承自Vector,它实现了一个后进先出的堆栈。提供了5个方法,很类似堆栈的使用。push()用来将元素压入栈中,pop()用来从栈中获取元素。peek()方法得到栈顶的元素,empty()用于检测堆栈是否为空。search()方法用于检测一个元素在堆栈中的位置。
常用集合类HashSet
这个类实现了Set接口,不保证集合的迭代顺序。
常用集合类Hashtable
Hashtable继承Map接口,实现了一个键值对应的哈希表。提供的方法有:
put(key,value)用于添加键值对;
get(key)用于取出数据。
适用范围
List、Set和Map都有不同的特点,那么什么情况下应该使用List,什么情况下可以使用Set,又在什么情况下使用Map呢?
如果涉及到堆栈、队列等操作的,直接考虑用List。
如果要考虑效率,就要使用HashSet、HashMap,它们的效率更高。
下节文章开始,我们将开始学如何使用这些常用的集合类。