集合类又被叫做容器,其与数组有些相似,不同之处在于数组是定长的,而集合是变长的;数组用来存放基本类型的数据,集合用来存放对象的引用。常用的集合有List、Set和Map。
List和Set继承了Collection接口。上述集合类的继承关系如下:
Collection接口提供了添加元素、删除元素、管理数据的方法,因此这些方法对List和Set是通用的
方法 | 功能 |
---|---|
add(E, e) | 将指定对象添加到集合中 |
remove(Object o) | 将指定对象从该集合中移除 |
isEmpty() | 返回布尔,判断当前集合是否为空 |
iterator() | 返回迭代器,用于遍历集合中的对象 |
size() | 返回集合中的元素个数 |
List集合
List集合允许元素重复,顺序为对象插入的顺序,可通过索引访问集合中的元素
List接口
List接口继承了Collection接口,因此包含Collection中的所有方法,此外,List接口还定义了两个重要方法
get(int index) 获取指定位置的元素
set(int index, Object obj) 将指定位置的元素修改为指定的对象
List接口的实现类
List接口的常用实现类有ArrayList 和 LinkedList
ArrayList:实现了可变的数组,允许保存所有元素(包括null),可根据索引进行随机访问。缺点是向指定位置插入或删除对象速度慢
LinkedList:采用链表结构存储对象,优点是插入删除效率高,但随机访问效率低
声明语法
List<E> list = new ArrayList<>(); E为合法Java数据类型
List<E> list = new LinkedList<>();
Set集合
Set集合中的对象无需且不重复,Set集合也继承了Collection接口,因此包含Collection中的所有方法
Set接口的实现类有HashSet类与TreeSet类
HashSet:由哈希表(实为一个HashMap实例)支持,允许使用null元素
TreeSet:它实现了Set接口和java.util.SortedSet接口,因此TreeSet类实现的Set集合在遍历时按照顺序排序
TreeSet类新增的方法如下
first() 返回Set中第一个元素
last() 返回Set中最后一个元素
comparator() 返回Set中元素的排序顺序
headSet(E toElement) 返回新Set,其中是toElement元素(不包含)之前的所有元素
tailSet(E fromElement) 返回新Set,其中是fromElement元素(包含)之后的所有元素
subSet(E fromElement, E fromElement) 截取两个元素之间的所有元素(前闭后开)作为新Set返回
Map集合
Map接口提供了将key映射到value的接口,key和value一一对应
Map接口提供了一些常用方法
put(K key, V value) 向集合中添加指定的key:value
containsKey(Object key) 若包含key,返回true
containsValue(Object value) 若中有key映射到指定value,返回true
get(Object key) 若存在key,则返回对应的value
keySet() 返回该集合中的所有key
values() 返回该集合中的所有value形成的Collection集合
Map接口的常用实现类有HashMap 和 TreeMap,建议用HashMap实现Map集合,效率更高
HashMap:基于哈希表的Map接口实现,允许使用null值和null键,但键要唯一。HashMap通过哈希表对其内部的映射关系进行快速查找。映射的顺序不确定
TreeMap:实现了Map接口和java.util.SortedSet接口,因此集合中的映射关系具有一定顺序。但在添加删除和定位映射关系时,TreeMap比HashMap性能稍差。由于有序,所以不允许键是null