集合分为几个阶段:
1、常见集合的API的掌握(基础)
2、各种常见集合的特点(进阶)记忆
3、底层的实现(难)(周期比较长)
4、自定义集合(非常难)(周期更长)
一,定义
集合 :既是容器,装对象。
【数组 :也是一种容器,装对象。比较原始】
数组与集合的区别:
1)数组的长度是固定的,如果需要扩容,则需要代码来实现;
集合的长度不是固定的,长度的改变等程序内部可以处理。
2)数组可以装任意数据类型的数据;
集合只可以装对象,不可以装基本数据类型的数据。
集合的类别:
最常见的两大派别 :Collection 和Map;
Collection :存储单个对象;例:单身party
Map :可以理解为存储多个 Collection。例 :情侣party,家庭party
二,Collection集合
1,根接口 :java.util.Collection< E >
- < E > 代表了集合中元素的类型;
- 对于Collection集合内部表现的顺序排列,JDK以具体子类[Set 和 List]接口来实现,本身不直接实现。
2,API中的基础方法
1)增
boolean add(E e);
//添加一个元素
boolean addAll(Collection<? extends E> c);
//添加多个元素,把c集合中的元素全部添加到当前集合中
collection<String> c1 = new ArrayList<>();
collection.add("hello");
collection.add("world");
sout(c1);
//[hello , world]
Collection<String> c2 = new ArrayList<>();
c2.add("张三");
c2.add("李四");
c1.addAll(c2);
c1.add(c2);//错误操作
sout(c2);
//[hello , world , 张三 , 李四]
2)删
void clear();
//清空集合
boolean remove(Object o);
//删除一个元素,如果有重复元素,只会删除一个
boolean removeAll(Collection<?> c);
//删除多个元素,删除当前集合与c集合重复的元素
--->this集合 = this集合 - this集合 ∩ c集合;
c1.clear();
//[]
c1.remove("hello");
//[world, 张三, 李四]
c1.removeAll(c2);
//[hello , world]
问?在使用foreach循环的过程中,是不是可以调用Collection集合的remove方法?
答 :不能,因为可能发生ConcurrentModificationException(并发修改异常//两条线同时修改)
3)查
int size();
//查询元素的个数
boolean contains(Object o);
//是否包含某个元素
boolean containsAll(Collection<?> c);
//是否包含c集合中的所有元素,即判断c集合是否是this集合的子集
boolean isEmpty();
//是否为空集合
Collection<String> c3 = new ArrayList<>();
c3.add("hello");
c3.add("world");
c3.add("java");
sout(c3.size());
//3
Collection<String> c = new ArrayList<>()