一、集合框架概述
***Java提供了实现各种数据结构操作的集合类,操作起来非常方便。Java的集合由两种类型构成,一种是Collection,用于存储一组对象;另一种是Map,用于存放键值对的对象。
***Collection接口是最基本的集合类接口,它有三个子接口:Set接口、List接口和Queue接口。Collection接口定义的方法如下:
Collection接口定义的方法
方法申明 | 功能描述 |
boolean add(E e) | 将对象加入集合 |
boolean remove(Object o) | 从这个集合中移除指定元素的一个实例 |
void clear() | 从这个集合中移除所有的元素 |
Iterator<E>iterator() | 回此集合中的元素的迭代器 |
int size() | 返回此集合中的元素的数目 |
Object[] toArray() | 返回包含此集合中的所有的元素的数组 |
boolean contains(Object o) | 返回true,当且仅当这个集合包含至少一个元素 |
二、List 接口简介
2.1 List 接口
***List接口是collection接口的子接口,它实现的是一种线性表的数据结构。List接口是有序的集合,能够精确的控制元素的插入位置,存放在List接口的所有元素可以通过类似于数组下标的方式访问,List接口允许存入相同的元素。
List接口 | 简介 |
ArrayList类 | 是List接口的实现类,在它内部封装了一个长度可变的数组对象。它能快速地随机访问各个元素,但在插入和删除元素时,需要动态重建数组。 add():往集合类中添加对象,如果当前位置有元素的话,将当前处于该位置的元素和所有后续元素向右移动,也就是索引加1。 get():通过下标索引获得集合内部的元素。 |
LinkList类 | LinkList集合内部维护了一个双向循环列表,与ArrayList集合相比,LinkList在添加和删除元素是非常快的。 LinkList类定义的一些特有方法: Void addFirst(Object o):将指定元素插入列表头部 Void addLast(Object o):将指定元素插入列表尾部 Object getFirst():返回列表中的第一个元素 Object getLast():返回列表中的最后一个元素 Object removeFirst:删除并返回列表中的第一个元素 Object removeLast():删除并返回列表中的最后一个元素 void add(int index,E element):在列表中指定的位置上插入指定的元素 |
2.2 Iterator接口
***在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口是在集合类内部实现的,隐藏了各种集合类内部的实现细节,并对外实现该接口的对象,用于迭代的遍历Collection接口中的元素,也称为迭代器。需要遍历Collection集合,就要获取该迭代器来完成迭代操作。
***Collection 接口的Iterator()方法返回一个Iterator接口,然后通过Iterator接口的hsaNext()和next()方法实现集合的遍历。
三、Set 接口
***与List接口一样,Set接口继承了Collection接口,它以某种规则保证存入集合内的元素不出现重复。同时,Set接口中的元素是无序的,因此没有List接口的get方法,不能使用下标访问集合中的元素。Set接口主要有两个实现类,分别是HashSet集合和TreeSet集合。
Set接口实现类
Set接口 | 简介 |
HashSet集合 | 该集合底层由HashMap实现,当向HashSet集合中添加元素时,会调用对象的hashCode()方法来计算哈希值,根据该值确定确定元素在集合中的存储位置。由于用到了散列函数,因此存储速率非常块。 HashSet集合中判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。 |
TreeSet集合 | TreeSet集合底层是使用TreeMap实现的,其中存放的元素是以compareTo()方法的返回值进行排序的,因此TreeSet集合是有序的。 与HashSet集合一样,不允许重复值,但保证不重复的关键因素不是equals()方法和HashCode()方法,而是comepareTo()方法。 |
四、Map接口
***Map接口用来存储键值对的对象,提供键(key)到值(value)的映射。从Map集合中访问元素时,只要指定了key,就能得到对应的value。Map接口定义的常用方法如下:
Map接口的常用方法
方法 | 功能描述 |
void clear | 从集合中移除所有的映射 |
V put(K key,V value) | 将指定的值与此映射中的指定键关联 |
V get(Object key) | 返回指定的键映射的值 |
boolean containsKey(Object value) | 如果此集合中包含指定键的映射,则返回true |
boolean containsValue(Object value) | 如果此集合中包含指定将一个或多个键映射到值,则返回true |
Collection<V>value() | 返回此集合中包含的值的Collection集合 |
Set<K>keySet | 返回此集合中包含的键的Set集合 |
***HashMap类和TreeMap类实现了Map接口,HashMap类通过hashCode()方法对其内部映射关系进行快速查找,而TreeMap类中的映射关系都保持着某种固定的顺序,如果需要得到一个有序的集合,就应该使用TreeMap类,否则就用HashMap类,因为HashMap类在添加和删除映射关系方面更高效。
***Properties类主要用来存储字符串类型的键值对,经常用来存储应用程序的配置信息,如用户的设置信息,程序运行的相关信息等。Properties类是HashTable的子类,它可以从输入流中获得键值对信息,能够将键值对保存到输入流中。主要的方法如下。
Properties常用方法
方法 | 功能描述 |
getproperty(String key) | 通过参数key,得到key所对应的value |
load(IntputStream inStream) | 从输入流中读取属性列表,也就是从文件中获得键值对,以供getProperty(String key)来搜索 |
setProperty(String key,String value) | 通过调用父类的put()方法来设置键值对 |
store(OutputStream out,S听comments) | 与load()方法相反,该方法键值对写写入指定的文件中 |
clear() | 清除所有装载的键值对,该方法由父类提供 |
Enumeration<?>propertyNames() | 返回properties类中的key值 |