单列集合Collection

集合框架

1、概念

  • 概念:集合一种容器,可以存储对象。
  • 集合和数组区别:
    • 数组的长度固定,集合长度不固定
    • 数组可以存储基本数据类型和引用数据类型 int[] / Student[],集合是能存储引用数据类型
    • 数组中每个元素都是相同的数据类型,集合可以存储不同的数据类型

2、集合框架

在这里插入图片描述

Collection接口

单列集合的顶层接口

1、常用方法

  • add方法向集合集合中添加元素
  • clear方法,清空集合中所有元素
  • contains方法 判断集合是否包含某个元素
  • isEmpty判断集合是否为空
  • remove方法 移除集合中元素,返回boolean类型。如果集* * 合中不包含次元素,则删除失败
  • size()返回集合中元素的个数
  • toArray将集合转换成数组。
  • addAll 向一个集合中添加另一个集合
  • containsAll 判断一个集合中是否包含另一个集合
  • removeAll 从一个集合中移除另一个集合
public class CollectionDemo {
    public static void main(String[] args) {
        //创建Collection 对象
        Collection coll = new ArrayList();
        //常用方法
        //add方法向集合集合中添加元素
        coll.add("张三");
        coll.add(10);
        coll.add(20.20);
        coll.add(new Student("cxk"));
        System.out.println(coll);//[张三, 10, 20.2, Student{name='cxk'}]

        //clear方法,清空集合中所有元素
//    coll.clear();
//    System.out.println(coll);

        //contains方法 判断集合是否包含某个元素
        System.out.println(coll.contains("张三"));//true
        System.out.println(coll.contains("cxk"));//false

        //isEmpty判断集合是否为空
        System.out.println(coll.isEmpty());//false

        //remove方法 移除集合中元素,返回boolean类型。如果集合中不包含次元素,则删除失败
        coll.remove("张三1");
        System.out.println(coll);//[张三, 10, 20.2, Student{name='cxk'}]

        //size()返回集合中元素的个数
        System.out.println("集合中元素的个数:"+coll.size());//集合中元素的个数:4

        //toArray将集合转换成数组。
        Object[] arr = coll.toArray();
        System.out.println(Arrays.toString(arr));// [张三, 10, 20.2, Student{name='cxk'}]
        System.out.println("---------------------------------------------------------");
        Collection coll1 = new ArrayList();
        coll1.add("1");
        coll1.add("2");
        Collection coll2 = new ArrayList();
        coll2.add("a");
        coll2.add("b");
        //addAll  向一个集合中添加另一个集合
        coll1.addAll(coll2);
        System.out.println(coll1); // [1, 2, a, b]

        //containsAll 判断一个集合中是否包含另一个集合
        System.out.println(coll2.containsAll(coll1));//false

        //removeAll  从一个集合中移除另一个集合
        coll2.removeAll(coll1);
        System.out.println(coll2); //[]
    }
    private static class Student {
        String name;
        public Student(String name) {
           this.name = name;
        }
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
}

迭代器

1、迭代器原理

在这里插入图片描述
演示

public class IteratorDemo {
 public static void main(String[] args) {
  //创建Collection对象
  Collection coll = new ArrayList();
  coll.add("张三1");
  coll.add("张三2");
  coll.add("张三3");
  coll.add("张三4");
  coll.add("张三5");
  coll.add("张三6");
  //通过集合获取迭代器对象   
  Iterator it = coll.iterator();
  while(it.hasNext()) {
   System.out.println(it.next());
  }
 }
}

2、foreach循环

foreach循环即增强版的for循环

/**
* foreach循环  增强版for循环
* 语法:
* for(每个元素的类型   变量 :要遍历的集合){
* 
* }
*/
for(Object obj:coll) {
    System.out.println(obj);
}

3、迭代器使用常见问题

  • 如果迭代器使用过,那么游标指向最后的位置
  • 在一次迭代中,不要多次调用next方法
  • 在迭代器迭代的时候,不能对集合进行添加或删除
  • 如果在迭代过程要移除元素,需要使用迭代器的remove方法
public class Demo10 {
    public static void main(String[] args) {
        //创建Collection对象
        Collection coll = new ArrayList();
        coll.add("张三1");
        coll.add("张三2");
        coll.add("张三3");
        coll.add("张三4");
        coll.add("张三5");
        coll.add("张三6");
        coll.add("张三7");

        //通过集合获取迭代器对象
        Iterator it = coll.iterator();
      while(it.hasNext()) {
         System.out.println(it.next());//可以输出
      }
        //一、如果迭代器使用过,那么游标指向最后的位置
      while(it.hasNext()) {
         System.out.println(it.next());//无法输出,上面用过了
      }

        //二、在一次迭代中,不要多次调用next方法        java.util.NoSuchElementException
      while(it.hasNext()) {
         Object obj = it.next();
         System.out.print(it.next()+"\t");//张三2 张三4 张三6 java.util.NoSuchElementException

        }

        //三、在迭代器迭代的时候,不能对集合进行添加或删除  java.util.ConcurrentModificationException
      while(it.hasNext()) {
         coll.add("rose");
         coll.remove("张三3");
         System.out.println(it.next());//java.util.ConcurrentModificationException
      }

        //四、如果在迭代过程要移除元素,需要使用迭代器的remove方法
        while(it.hasNext()) {
            System.out.print(it.next()+"\t");//张三1 张三2    张三3    张三4    张三5    张三6    张三7
            it.remove();
        }
        System.out.println(coll);//[]
    }
}

泛型基本使用

1、为什么要有泛型?

  • 如果不使用泛型,那么集合中存储的元素,要不断 发生向上向下转型,而转型就有可能会发生错误
  • 泛型的作用就是将类型的检查提前到了编译期

2、泛型的语法:

  • 集合<类型> 集合名 = new 集合<类型>();

3、泛型注意的地方

  • 泛型不存在多态,没有继承
 Collection<Animal> coll1 = new ArrayList<Dog>();  报错
  • 只能使用基本数据类型的包装类
Collection<Integer> cool2 = new ArrayList<Integer>();
``` 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值