zoukankan      html  css  js  c++  java
  • 集合和Iterator迭代器

    集合

    集合是java中提供的一种容器,可以用来存储多个数据。

    注意:

    ①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,

      其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。

    ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。

    ③、集合可以存放不同类型,不限数量的数据类型。

     用ArrayList集合存储int类型数组:

    复制代码
     1 public static void main(String[] args) {
     2         
     3         ArrayList<Integer> arr=new ArrayList<Integer>();
     4         arr.add(1);
     5         arr.add(12);
     6         arr.add(2);
     7         for(int i=0;i<arr.size();i++){
     8             System.out.print(arr.get(i)+" ");
     9         }        
    10     }
    复制代码

    ArrayList集合存储5个Person类型元素:

    复制代码
    1     ArrayList<Person> arr=new ArrayList<Person>();
    2         arr.add(new Person("小猪佩奇",18));
    3         arr.add(new Person("乔治",17));
    4         arr.add(new Person("熊大",16));
    5         arr.add(new Person("熊二",15));
    6         for(int i=0;i<arr.size();i++){
    7             System.out.println(arr.get(i));
    8         }
    复制代码

    集合的继承实现关系

    查看ArrayList类发现它继承了抽象类AbstractList同时实现接口List,而List接口又继承了Collection接口。

    Collection接口为最顶层集合接口了。

    Collection接口概述:

    Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用,不过Collection接口定义了一些通用的方法,

    通过这些方法可以实现对集合的基本操作,因为List接口和Set接口继承自Collection接口,

    所以这些方法对List集合和Set集合是通用的。

    Collection接口的基本方法:

    创建集合的格式:

    1 方式1:Collection<元素类型> 变量名 = new ArrayList<元素类型>();
    2 方式2:Collection 变量名 = new ArrayList();

    方式1创建的集合,只能存储<>中指定的元素类型,该方式为常用方式

    方式2创建的集合,集合的元素类型默认为Object类型,即任何类型的元素都可以存储。

    代码展示:

    复制代码
     1 public static void main(String[] args) {
     2         Collection<String> con=new ArrayList<String>();
     3         con.add("粉猪佩奇");
     4         con.add("巴啦啦小魔仙");
     5         con.add("全身变");
     6         con.add("乌卡拉");
     7         con.add("变身");
     8         boolean flag=con.contains("巴啦啦大魔仙");
     9         System.out.println(flag);
    10         con.remove("变身");
    11         //con.clear();
    12         con.toArray();
    13         for(int i=0;i<con.size();i++){
    14             ArrayList<String> arr=(ArrayList<String>)con;
    15             System.out.println(arr.get(i));
    16         }
    17     }
    复制代码

    Iterator迭代器

    一、Iterator迭代器概述

    java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。

    Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,

    如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

     Iterator接口的常用方法:

    代码展示:

    复制代码
     1     public static void main(String[] args) {
     2         ArrayList<Integer> arr=new ArrayList<Integer>();
     3         arr.add(1);
     4         arr.add(12);
     5         arr.add(2);
     6         //1.获取Iterator对象
     7         //Iterator<Integer> it=arr.iterator();
     8         //while循环取出元素
     9         /*while(it.hasNext()){
    10             System.out.println(it.next());
    11         }*/
    12         //for循环迭代
    13         for(Iterator<Integer> it=arr.iterator();it.hasNext();){
    14             System.out.println(it.next());
    15         }
    16         /*//2.判断集合下一位是否有元素
    17         boolean flag=it.hasNext();
    18         System.out.println(flag);
    19         //3.获取元素
    20         System.out.println(it.next());*/
    21 
    22     }
    复制代码

    图解:

    Iterator迭代方式的代码体现:

    复制代码
     1 //1,创建集合对象。
     2 Collection<String> coll = new ArrayList<String>();
     3 coll.add("abc1");
     4 coll.add("abc2");
     5 coll.add("abc3");
     6 coll.add("abc4");
     7  
     8 //2.获取容器的迭代器对象。通过iterator方法。
     9 Iterator it = coll.iterator();
    10  
    11 //3,使用具体的迭代器对象获取集合中的元素。参阅迭代器的方法
    12 while(it.hasNext()){
    13     System.out.println(it.next());
    14 }
    15  
    16 /*
    17 迭代器for循环的形式的使用
    18 for (Iterator it = coll.iterator(); it.hasNext(); ) {
    19     System.out.println(it.next());
    20 }
    复制代码

    集合元素的向下转型

    复制代码
     1 public static void main(String[] args) {
     2         Collection<String> con=new ArrayList<String>();
     3         con.add("粉猪佩奇");
     4         con.add("巴啦啦小魔仙");
     5         con.add("全身变");
     6         con.add("乌卡拉");
     7         con.add("变身");
     8         Iterator<String> it=con.iterator();
     9         while(it.hasNext()){
    10             Object obj=it.next();
    11             String str=(String)obj;//如果不加泛型 需要向下转型
    12             System.out.println(str.length());
    13         }
    14     }
    复制代码

    增强for循环

    格式:

    for(元素的数据类型 变量 : Collection集合or数组){}

    复制代码
     1 public static void main(String[] args) {
     2         ArrayList<Integer> arr=new ArrayList<Integer>();
     3         arr.add(1);
     4         arr.add(12);
     5         arr.add(2);
     6         //普通for
     7         for(int i=0;i<arr.size();i++){
     8             arr.get(i);
     9         }
    10         //增强for(底层就是迭代器的原理)
    11         //for(集合存储类型 变量: 你要遍历的集合名){
    12             //System.out.println(变量);
    13         //}
    14         for(Integer i:arr){
    15             System.out.println(i);
    16         }
    17     }
    复制代码

    练习:

    定义方法frequency统计集合中指定元素出现的次数,如"a" 3,"b" 2,"c" 1

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class text {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            list.add("a");
            list.add("a");
            list.add("a");
            list.add("b");
            list.add("b");
            list.add("c");
            list.add("d");
            list.add("d");
            list.add("d");
            list.add("d");
            list.add("d");
            System.out.println(frequency(list, "a"));
            System.out.println(frequency(list, "b"));
            System.out.println(frequency(list, "c"));
            System.out.println(frequency(list, "d"));
            System.out.println(frequency(list, "xxx"));
        }
        public static int frequency(List<String> arr,String a){
            int num=0;
            Iterator<String> it=arr.iterator();
            while(it.hasNext()){
                if(it.next()==a){
                    num+=1;
                }
            }
            return num;
        }
    }

    2.某中学有若干学生(学生对象放在一个List中),每个学生有一个姓名属性(String)、班级名称属性(String)和考试成绩属性(double) 
    某次考试结束后,每个学生都获得了一个考试成绩。遍历list集合,并把学生对象的属性打印出来。

    public class person {
        private String name;
        private String class_name;
        private double score;
        public person(String name, String class_name, double score) {
            super();
            this.name = name;
            this.class_name = class_name;
            this.score = score;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getClass_name() {
            return class_name;
        }
        public void setClass_name(String class_name) {
            this.class_name = class_name;
        }
        public double getScore() {
            return score;
        }
        public void setScore(double score) {
            this.score = score;
        }
        //重写toString
        public String toString() {
            return "姓名:" + name + "	班级:" + class_name + "	成绩:" + score;
        }
        
    }
    import java.util.ArrayList;
    
    public class student {
        public static void main(String[] args) {
            person p1=new person("劳拉","java01",100);
            person p2=new person("萨曼莎","java02",90);
            person p3=new person("约拿","java03",80);
            ArrayList<person> stu=new ArrayList<person>();
            stu.add(p1);
            stu.add(p2);
            stu.add(p3);
            //循环打印
            for(person i:stu){
                System.out.println(i);
            }
        }
    }
  • 相关阅读:
    vscode settings
    AutomaticPrefetchPlugin
    echarts 文字超长换行
    webpack篇(三):serve启动 打印台友好提示
    webpack篇(二):webpack 5 (变化)
    webpack篇(一):webpack 5 热更新体验
    面试(保存一些面试相关的网址链接,方便之后复习)
    路由传递参数的常见的两种形式
    组件缓存注意事项 ---keep-alive
    从css属性和布局来说明一下,行类元素和行类块元素和块元素的区别
  • 原文地址:https://www.cnblogs.com/Ace-suiyuan008/p/9415112.html
Copyright © 2011-2022 走看看