Java集合系列之Collection接口和常用方法

1.3Collection接口和常用方法

  • Collection接口实现类的特点

    public interface Collection<E> extends Iterable<E>

    • collection实现子类可以存放多个元素,每个元素可以是Object
    • 有些Collection的实现类,可以存放重复的元素,有些不可以
    • 有些Collection的实现类,有些是有序的(List),有些不是有序(Set)
    • Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的
  • public class CollectionMethod {
        @SuppressWarnings({"all"})
        public static void main(String[] args) {
            List list = new ArrayList();
            //add:添加单个元素
            list.add("jack");
            list.add(10);//list.add(new Integer(10));
            list.add(true);
            System.out.println("list=" + list);
            //remove:删除指定元素
            //list.remove(0);//删除第一个元素
            list.remove("jack");//指定删除某个元素
            System.out.println("list=" + list);
            //contains:查找元素是否存在
            System.out.println(list.contains("jack"));
            //size:获取元素个数
            System.out.println(list.size());
            //isEmpty:判断是否为空
            System.out.println(list.isEmpty());
            //clear:清空
            list.clear();
            System.out.println("list=" + list);
            //addAll:添加多个元素
            ArrayList list2 = new ArrayList();
            list2.add("红楼梦");
            list2.add("三国演义");
            list.addAll(list2);
            System.out.println("list=" + list);
            //list.containsAll:查找多个元素是否都存在
            System.out.println(list.containsAll(list2));
            list.add("聊斋");
            //removeAll:删除多个元素
            list.removeAll(list2);
            System.out.println("list=" + list);
        }
    }
    
  • Collection接口遍历元素方式1-使用Iterrator(迭代器)

    • Iterrator对象称为迭代器,主要用于遍历Collection集合中的元素
    • 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器
    • Iterator的结构
    • Iterator仅用于遍历集合,Iterator本身并不存放对象
  • 迭代器执行原理

在这里插入图片描述

注意:在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常

  • 案例:用迭代器遍历collection集合

    public class CollectionIterator {
        @SuppressWarnings({"all"})
        public static void main(String[] args) {
            //接口类型指向子类
             Collection col = new ArrayList();//向上转型
            col.add(new Book("三国演义", "罗贯中", 10.1));
            col.add(new Book("小李飞刀", "古龙", 5.1));
            col.add(new Book("红楼梦", "曹雪芹", 134.6));
            //System.out.println("col=" + col);
            //遍历col集合
            //1.先得到col对应的迭代器
            Iterator iterator = col.iterator();
            //2.使用while循环遍历即可
            while (iterator.hasNext()){//判断是否还有数据
                //返回下一个元素,类型是Object
                Object obj = iterator.next();//动态绑定机制
                System.out.println("obj=" + obj);
            }
            //快捷键生成while循环=>itit
            //3.当退出while循环后,这时iterator迭代器,指向最后的元素
            //4.如果希望再次遍历,需要重置迭代器
            iterator = col.iterator();
            System.out.println("=====第二次遍历=====");
            while (iterator.hasNext()){//判断是否还有数据
                //返回下一个元素,类型是Object
                Object obj = iterator.next();//动态绑定机制
                System.out.println("obj=" + obj);
            }
        }
    }
    class Book {
        private String name;
        private String author;
        private double price;
    
        public Book(String name, String author, double price) {
            this.name = name;
            this.author = author;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAuthor() {
            return author;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "name='" + name + '\'' +
                    ", author='" + author + '\'' +
                    ", price=" + price +
                    '}';
        }
    }
    
  • collection接口遍历对象方式2-for循环增强

    增强for循环,可以代替iterator迭代器,特点:增强for就是简化版的iterator,本质一样。只能用于遍历集合或数组

    • 基本语法

      for(元素类型 元素名:集合名或数组名){

      ​ 访问元素

      }

      public class CollectionFor {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
              Collection col = new ArrayList();//向上转型
              col.add(new Book("三国演义", "罗贯中", 10.1));
              col.add(new Book("小李飞刀", "古龙", 5.1));
              col.add(new Book("红楼梦", "曹雪芹", 134.6));
              //1.使用增强for循环,在collection集合上使用
              //2.增强for,底层仍然是迭代器
              //3.快捷键=》I
              for(Object book : col){
                  System.out.println("book=" + book);
              }
              //增强for循环可以直接在数组使用
              int[] nums = {1, 2, 10, 90};
              for(int i : nums){
                  System.out.println("i=" + i);
              }
          }
      }
      
  • 练习

    public class CollectionExercise {
        @SuppressWarnings({"all"})
        public static void main(String[] args) {
            //接口类型指向子类
            Collection dog = new ArrayList();
            dog.add(new Dog("宋承龙", 22));
            dog.add(new Dog("谢子栋", 23));
            //iterator迭代器遍历
            //先得到dog对应的迭代器
            Iterator iterator = dog.iterator();
            while(iterator.hasNext()){
                Object obj = iterator.next();
                System.out.println("obj=" + obj);
            }
            //用增强for循环遍历
            for(Object obj : dog){
                System.out.println("obj=" + obj);
            }
        }
    }
    class Dog {
        private String name;
        private int age;
    
        public Dog(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值