1.集合类
java.until包中提供了一些集合类,这些集合类又被称为容器。
集合类与数组的不同之处是:数组的长度是固定的,集合的长度是可变的;数组用来存放基本类型的数据,集合用来存放对象的引用。
常用集合有List集合、Set集合、Map集合,其中List与Set继承Collection接口
2.Collection接口
Collection接口是层次结构中的根接口。
构成Collection的单位称为元素
Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法
方法 | 功能描述 |
add(E e) | 将指定对象添加到该集合中 |
remove(Object o) | 将指定的对象从该集合中移除 |
isEmpty() | 返回boolean值 , 用于判断当前接口集合是否为空 |
iterator() | 返回在此Collection的元素上进行迭代的迭代器,用于遍历集合中的对象 |
size() | 返回int型值 , 获取该集合中元素的个数 |
例子:
public class test01 {
public static void main(String[] args) {
// 实例化集合类对象
ArrayList<Object> arrayList = new ArrayList<>();
// 向集合内添加数据
arrayList.add("a");
arrayList.add("d");
arrayList.add("d");
// 创建迭代器
Iterator<Object> iterator = arrayList.iterator();
// 判断集合内是否还有下一个元素
while(iterator.hasNext()){
// 获取集合中的元素,输出
Object next = iterator.next();
System.out.println(next);
}
}
}
3.List集合
List结合中包括List接口以及List接口的所有实现类。
List集合中的元素允许重复,各元素的顺序就是对象插入的顺序,类似于Java数组,用户可以通过索引来访问集合中的元素
3.1List接口
List接口继承了Collection接口
两个非常重要的方法
get(int index) :获得指定索引位置的元素
set(int index , Object obj) : 将集合中指定索引位置的对象修改为指定为的对象
3.2List接口的实现类
ArrayList 类实现了可变的数组,允许保存所有的元素 , 包括null , 并可以根据索引位置对集合进行随机访问;缺点是向指定的索引位置插入对象或者删除对象的速度较慢。
LinkedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入、删除对象时,使用LinkedList类实现的List集合的效率较高;但对于随机访问集合中的对象,使用LinkedList类实现List集合的效率较低。
3.3Set集合
Set集合中的对象不按特定的方式排序 , 只是简单地把对象加入集合中,但Set集合中不能包含重复对象。
Set集合由Set接口和Set接口地实现类组成,Set继承了Collection接口的所有方法
Set接口常用的实现类有HashSet类与TreeSet类
HashSet类实现Set接口 , 由哈希表(实际上是一个HasMap实例)支持。不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类不允许null元素
TreeSet类不仅实现了Set接口,还实现了java.util.SorteSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,也可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序
TreeSet类新增的方法
方法 | 功能描述 |
first() | 返回此set中当前第一个(最低)元素 |
last() | 返回此set中当前最后一个(最高)元素 |
comparator() | 返回对此Set中的元素进行排序的比较器。如果此set使用自然排序,则返回null |
headSet(E toElement) | 返回一个新的Set集合,新集合是toElement(不包含)之前的所有对象 |
subSet(E fromElement,E fromElement) | 返回一个新的Set集合 , 是fromElement(包含)对象与fromElement(不包含)对象之间的所有对象 |
tailSet(E fromElement) | 返回一个新的Set集合,新集合包括fromElement(包含)之后的所有对象 |
4.Map集合
Map集合没有继承Collection接口 , 其提供的是key到value的映射。
Map中不能包含相同的key,每个key只能映射一个value。
key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种”散列技术“进行处理,产生一个散列码的整数值,从而确定存储对象在映射中的存储位置。
4.1Map接口
方法 | 功能描述 |
put(K key ,V value) | 向集合中添加指定的key与value的映射关系 |
containsKey(Object key) | 如果此映射包含指定key的映射关系,则返回true |
containsValue(Object value) | 如果此映射将一个或者多个key映射到指定值,则返回true |
get(Object key) | 如果存在指定的key对象,则返回该对象对应的值,否则返回null |
keySet() | 返回该集合中的所有key对象形成的Set集合 |
values() | 返回该集合中所有值对象形成的Collection集合 |
注:Map集合中允许值对象是null , 而且没有个数限制