集合和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 + "\t班級:" + class_name + "\t成績:" + 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);
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM