开发和学习中需要时刻和数据打交道,由于数组远远不能满足我们对于“管理和组织数据的需求”,所以我们需要一种更强大、更灵活的,容量随时可扩的容器来装载我们的对象。 这就是我们要学习的容器或者叫集合,集合存储的数据必须是引用类型数据。
1.集合的概述:
集合的本质就是一个容器,不同的集合所对应的数据结构也不一样,则对应的“增删改查”效率也就不一样。
2.学习集合的核心
a)掌握集合的“增删改查”效率
b)掌握不同集合是否有序。
b)掌握不同集合是否可存储相同的元素。
3.集合的继承体系
Collection接口位于java.util包中,常用的派生接口是List接口和Set接口:
(一)List接口常用的子类有:ArrayList类、LinkedList类、Vector类。
(二)Set接口常用的子类有:HashSet类、LinkedHashSet类、TreeSet类。
Map接口,位于java.util包中,重要的实现类有:
TreeMap类、HashMap类、LinkedHashMap类、Hashtable类、Properties类
4.Collection接口的抽象方法
注意:只要是List接口和Set接口的实现类,肯定都实现了Collection接口的抽象方法。 |
int size(); 容器中元素的数量。 |
boolean add(Object o); 增加元素到容器中。 |
boolean isEmpty(); 容器是否为空。 |
boolean addAll(Collection c); 将容器c中所有元素增加到本容器。 |
boolean remove(Object o); 从容器中移除元素。 |
boolean removeAll(Collection c); 移除本容器和容器c中都包含的元素。 |
boolean retainAll(Collection c); 取本容器和容器c中都包含的元素,移除非交集元素。 |
boolean contains(Object o); 容器中是否包含该元素。 |
boolean containsAll(Collection c); 本容器是否包含c容器所有元素。 |
Object[] toArray(); 把容器中元素转化成Object数组。 |
注意:只要是List接口和Set接口的实现类,肯定都实现了Collection接口的抽象方法 |
// 1.创建集合
Collection coll = new ArrayList();
// 2.往集合中添加对象元素
coll.add("111");
coll.add("222");
coll.add("333");
System.out.println(coll); // 输出:"[111, 222, 333]"
// 3.从集合中删除元素
coll.remove("111");
System.out.println(coll); // 输出:"[222, 333]"
// 4.判断集合中是否包含指定元素
System.out.println(coll.contains("222")); // 输出:true
// 5.获取集合元素个数
System.out.println(coll.size()); // 输出:2
List接口
List接口是Collection接口的子接口,则意味着Collection接口中的方法list接口中的实现类都有。
list接口常见的实现类:ArrayList类、LinkedList类和Vector类
List接口的特点:满足“存储的元素有序”,并且可以存储“相同的元素”。
List是Collection的子接口,除了Collection接口中的方法,List还多了一些跟序号(索引)有关的方法:
void add(int index, Object obj); 在指定位置插入元素。 |
boolean addAll(int index, Collection c); 在指定位置增加一组元素 |
Object set(int index, Object element); 修改指定位置的元素。 |
Object get(int index); 返回指定位置的元素。 |
boolean remove(int index); 删除指定位置的元素,后面元素通通前移一位。 |
int indexOf(Object o); 返回第一个匹配元素的索引。如果没有该元素,返回-1。 |
int lastIndexOf(Object o); 返回最后一个匹配元素的索引。如果没有该元素,返回-1。 |
List subList(int fromIndex, int toIndex); 取出集合中的子集合,截取范围:[fromIndex, toIndex)。 |
ListIterator listIterator(); 为ListIterator接口实例化。 |
“获取、修改、删除”等操作,序号的取值范围:[0, list.size() - 1];“插入操作”序号的取值范围:[0, list.size()];如果操作的序号不合法,肯定会抛出“索引越界异常”。 |
ArrayList
ArrayList是List接口的实现类,则意味着Collection接口和List接口中的方法ArrayList都能使用。
ArrayList的底层就是数组,其本质就是对数组进行的封装,也就意味着数组的特点ArrayList都具备。
ArrayList的特点:查询效率高,增删效率低,线程不安全。
ArrayList的使用场合: 经常根据索引来做查询操作,但是很少根据索引做插入和删除操作,建议使用ArrayList集合。