在java.util包中提供了一些集合类,这些集合类又被称作容器,顾名思义,就是装载其他数据结构的集合。这些集合类的长度是可变的,用于存放对象的引用。常用的集合类有List、Set和Map。其中,List与Set继承了Collection接口,其关系如下:
1.Collection接口方法
Collection接口是层次结构中的根接口。构成Collection的单位称为元素。该接口通常不直接使用,但为继承类提供了添加,删除,管理元素的方法。
方法 | 功能描述 |
add(E e) | 将指定对象添加到集合中 |
remove(Object o) | 将对象从集合中删除 |
isEmpty() | 判断当前集合是否为空 |
itetator() | 返回一个当前集合的迭代器 |
size() | 返回当前集合中元素个数 |
其中,迭代器的相关操作定义在迭代器类Iterator中,常用方法有hasNext(),Next()等。下面给出一个用迭代器遍历集合的例子。
import java.util.*;
public class Test{
public static void main(String args[]){
Collection<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = (String)it.next();
System.out.println(str);
}
}
}
2.List集合
List中除了继承Collection方法外,还额外定义了两个方法。
1.get(int index):获得指定索引处的元素,可以理解为数组索引。
2.set(int index , Object o):将集合指定位置修改为指定对象。
可以看到上述两种方法十分类似数组的操作。对于初学者来说,List的操作更加简单与宽泛,接近C语言中的数组基本操作。
List接口的实现方式有两种,分别是ArrayList与LinkedList,两者的操作几乎完全一致,区别在于其实现方式。ArrayList的查找操作实现较快,而LinkedList的插入与删除操作较快。
下面给出另一种针对List的不用迭代器的遍历方法。
for(int i = 0 ; i < list.size() ; i++)
{
System.out.println(list.get(i)); //可以是其他相关操作
}
3.Set集合
Set接口的实现类也有两种,分别是HashSet以及TreeSet。其中HashSet由哈希表支持,不能保证Set中元素的迭代顺序。而TreeSet不仅实现了Set接口,同时还实现了java.util.SortedSet接口,因此在遍历集合时按照自然顺序递增。下面是TreeSet中增加的方法
方法 | 功能描述 |
first() | 返回Set中的第一个元素 |
last() | 返回Set中最后一个元素 |
comparator() | 返回一个比较器,若Set使用自然顺序,则返回null |
headSet(E toElement) | 返回一个新的Set,内容为toElement之前的所有对象(不包含toElement) |
subSet(E from , E to) | 返回一个新的Set,内容为from到to的所有对象,左闭右开 |
tailSet(E from) | 返回一个新的Set,内容为from后的所有对象,包含from |
4.Map集合
Map没有继承Collection接口,是因为Map的表述含义与List和Set不同。后两者存储的是单元对象,而Map存储的则是对象与对应值的一种映射关系,提供key到value的映射。一个key只能映射一个value。
下面是Map接口中常用的方法:
方法 | 功能描述 |
put(K key , V value) | 向集合中添加key到value的映射关系 |
containsKey(Object key) | 若包含关于key的映射关系,返回true |
containsValue(Object value) | 若包含关于value的映射关系,返回true |
get(Object key) | 返回key对应的value,没有返回null |
keySet() | 返回一个由集合中所有key组成的Set集合 |
values() | 返回一个有集合中所有values形成的Collction集合 |