注:详解核心源码 = 逐句解释源码 + 分情况举例说明 + 必要辅助图解
目录
Collection体系
Collection体系 注意事项
- List接口:有序(指添加的顺序和遍历的顺序是一致的)、有下标、元素可重复。
- Set接口:无序(指添加的顺序和遍历的顺序是不一致的)、无下标、元素不能重复。
Collection父接口
Collection方法
Collection案例实现
public class CollectionTest {
public static void main(String[] args) {
Collection collection=new ArrayList();
System.out.println("-----isEmpty------");
//isEmpty 判断集合是否有元素,有返回true,没有返回false
System.out.println(collection.isEmpty());
System.out.println("-----add------");
//add 往集合中添加元素
Student s1=new Student("张三",18);
Student s2=new Student("李四",19);
Student s3=new Student("王五",20);
Student s4=new Student("孙六",21);
Student s5=new Student("赵七",22);
collection.add(s1);
collection.add(s2);
collection.add(s3);
collection.add(s4);
collection.add(s5);
System.out.println(collection);
System.out.println("-----size------");
//size 返回集合中元素个数
System.out.println(collection.size());
System.out.println("-----remove------");
collection.remove(s3);
System.out.println(collection);
System.out.println("------removeAll-----");
//colletion.removeAll(Collection C)
//从collection中删除那些也包含在C中的所有元素
Student s6=new Student("刘八",23);
Collection collection2=new ArrayList();
collection2.add(s4);
collection2.add(s6);
collection.removeAll(collection2);
System.out.println(collection);
System.out.println("------retainAll-----");
//colletion.retainAll(Collection C)
//仅保留collection中那些也包含在C的元素
//没有一个交集返回true,有交集但不全交也返回true,而两个集合相等的时候,返回false
Student s7=new Student("林九",24);
Collection collection3=new ArrayList();
collection3.add(s7);
collection3.add(s1);
collection3.add(s2);
System.out.println(collection);
System.out.println("有交集:"+collection.retainAll(collection3));
Collection none=new ArrayList();
Collection test=new ArrayList();
test.addAll(collection);
System.out.println("没有交集:"+test.retainAll(none));
test.addAll(collection);
System.out.println("两个集合相等:"+test.retainAll(test));
System.out.println("------contains-----");
//contains 是否包含该元素 是返回true 不是返回false
System.out.println(collection.contains(s2));
//如果conrtains(新的对象) 那么就相当于开辟了新的空间,与原来的s2不同
System.out.println(collection.contains(new Student("李四",19)));
System.out.println("------containsAll-----");
//colletion.containsAll(Collection C)
//若collection包含T所有元素返回true,反之返回false
Collection collection4=new ArrayList();
collection4.add(s1);
System.out.println(collection.containsAll(collection4));
System.out.println("------equals and hashcode-----");
//equals 判断两个集合的每个元素的地址是否相等
System.out.println(collection);
Collection collection5=new ArrayList();
collection5.add(s1);
collection5.add(new Student("李四",19));
Collection collection6=new ArrayList();
collection6.add(s1);
collection6.add(s2);
System.out.println("collection"+collection.hashCode());
System.out.println("collection5"+collection5.hashCode());
System.out.println("collection6"+collection6.hashCode());
System.out.println(collection.equals(collection5));
System.out.println(collection.equals(collection6));
System.out.println("------addAll-----");
//colletion.addAll(Collection C)
//colletion中添加C中所有元素
collection.addAll(collection2);
System.out.println(collection);
System.out.println("------遍历-----");
//1.增强for遍历
for (Object o : collection) {
Student stu=(Student) o;
System.out.printf("%s ",stu.getName());
}
System.out.printf("\n");
//2.迭代器遍历
Iterator it=collection.iterator();
while (it.hasNext()){
Student student = (Student) it.next();
System.out.printf("%s ",student.getName());
if (student.getName().equals("刘八")){
it.remove();
}
}
System.out.printf("\n");
System.out.println(collection);
System.out.println("------toArray-----");
//toArray() 将集合变为数组
//toArray(T []) 将集合变为指定T数组
Student[] t=new Student[5];
Student[] arr = (Student[]) collection.toArray(t);