Java集合、Iterator迭代器和增強for循環整理


    集合

集合,集合是java中提供的一種容器,可以用來存儲多個數據。

數組的長度是固定的。集合的長度是可變的。集合中存儲的元素必須是引用類型數據

1.1      ArrayList集合存儲元素

package com.oracle.List;

 

import java.util.List;

import java.util.ArrayList;

import java.util.Iterator;

 

public class Demo01 {

        

         public static void main(String[] args) {

                   List<String> list=new ArrayList<String>();

                   list.add("a");

                   list.add("b");

                   list.add("c");

                   list.add(1,"e");

                   //遍歷

                   for(int i=0;i<list.size();i++){

                           

                            System.out.println(list.get(i));

                   }

                  

                   //刪除指定位置上的元素

                   list.remove(0);

                  

                   System.out.println("=========");

                   //遍歷

                   for(String i : list){

                           

                            System.out.println(i);

                   }

                   System.out.println("======================");

                   //修改指定位置上的元素

                   list.set(1, "你好嗎?");

                   Iterator<String> it=list.iterator();

                   while(it.hasNext()){

                            System.out.println(it.next());

                   }

         }

}

運行結果:

 

 

 

 

1.2      集合的繼承實現關系

查看ArrayList類發現它繼承了抽象類AbstractList同時實現接口List,而List接口又繼承了Collection接口

源代碼:

interface List extends Collection {

}

public class ArrayList extends AbstractList implements List{

}

這說明我們在使用ArrayList類時,該類已經把所有抽象方法進行了重寫。那么,實現Collection接口的所有子類都會進行方法重寫。

 

 

Collection接口常用的子接口有:List接口、Set接口

 

List接口常用的子類有:ArrayList類、LinkedList類

 

Set接口常用的子類有:HashSet類、LinkedHashSet類

 

 

ArrayList : 有序 可存儲重復元素 增刪快查找慢

LinkedArrayList : 有序 可存儲重復元素 查找快增刪慢

 

HashiSet:無序  不可重復

LinkedHashiSet:有序 不可重復

1.3      Collection接口的基本方法

既然Collection接口是集合中的頂層接口,那么它中定義的所有功能子類都可以使用。查閱API中描述的Collection接口。Collection 層次結構中的根接口。Collection 表示一組對象,這些對象也稱為 collection 的元素。一些 collection 允許有重復的元素,而另一些則不允許。一些 collection 是有序的,而另一些則是無序的。

 

 

 

 

實體類:

package com.oracle.Collections;

 

public class Person {

    private String name;

    private int age;

   

    public Person() {

   

    }

    public Person(String name, int age) {

        super();

        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 "Person [name=" + name + ", age=" + age + "]";

    }

    @Override

    public int hashCode() {

        final int prime = 31;

        int result = 1;

        result = prime * result + age;

        result = prime * result + ((name == null) ? 0 : name.hashCode());

        return result;

    }

    @Override

    public boolean equals(Object obj) {

        if (this == obj)

            return true;

        if (obj == null)

            return false;

        if (getClass() != obj.getClass())

            return false;

        Person other = (Person) obj;

        if (age != other.age)

            return false;

        if (name == null) {

            if (other.name != null)

                return false;

        } else if (!name.equals(other.name))

            return false;

        return true;

    }

   

   

}

 

package com.oracle.Collections;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

 

public class Demo01 {

         public static void main(String[] args) {

                   List<Integer> list=new ArrayList<Integer>();

                   list.add(55);

                   list.add(53);

                   list.add(5);

                   list.add(52);

                   list.add(24);

                   list.add(44);

                   list.add(33);

                   //對數組進行排序

                   Collections.sort(list);

                   for(int i :list){

                            System.out.print(i+" ");

                   }

                   System.out.println();

                   //打亂集合元素的順序

                   Collections.shuffle(list);

                   for(int i :list){

                            System.out.print(i+" ");

                   }

                   System.out.println();

                  

         }

}

 

運行結果:

 

 

 

 

package com.oracle.Collections;

 

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

 

public class Demo02 {

         private static Object classnames;

 

         public static void main(String[] args) {

                   HashMap<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>();

                   HashMap<Person,String> m1=new HashMap<Person,String>();

                   HashMap<Person,String> m2=new HashMap<Person,String>();

                   m1.put(new Person("拉拉",22), "java1203班");

                   m1.put(new Person("欣欣",21), "java1203班");

                   m2.put(new Person("夏欣",18), "java1010班");

                   m2.put(new Person("小曦",24), "java1010班");

                   map.put("北大", m1);

                   map.put("清華", m2);

                   //key+增強for

                   /*Set<String> schools=map.keySet();

                   for(String school : schools){

                            //根據學校名稱獲取所喲有班級map

                            HashMap<Person, String> classes = map.get(school);

                            //遍歷該班級的所有Set得到

                            Set<Person> persons=classes.keySet();

                            for(Person person:persons){

                                     String classname=classes.get(persons);

 

                                     System.out.println("學校名稱為:"+school+",班級名稱為:"+person.getName()+"年齡為:"+person.getAge());

                            }

                   }*/

                  

                   Iterator<Map.Entry<String, HashMap<Person, String>>> it=map.entrySet().iterator();

                  

                   while (it.hasNext()) {

                            //獲取學校

                            Entry<String, HashMap<Person, String>> schools = it.next();

                            String schooler = schools.getKey();

                            HashMap<Person, String> classer = schools.getValue();

                            Iterator<Map.Entry<Person, String>> it1=classer.entrySet().iterator();

                            while (it1.hasNext()) {

                                     Entry<Person, String> clas= it1.next();

                                     Person key = clas.getKey();

                                     String value = clas.getValue();

                                     System.out.println(schooler+"  "+key.getName()+"  "+key.getAge());

                            }

                         

                  

                  

                   }

                  

                  

         }

}

運行結果:

 

 

 

 

 Iterator迭代器

2.1    Iterator迭代器

Collection集合元素的通用獲取方式:在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為迭代。

 hasNext()方法:用來判斷集合中是否有下一個元素可以迭代。如果返回true,說明可以迭代。

next()方法:用來返回迭代的下一個元素,並把指針向后移動一位。

 

 

迭代集合元素圖解:

 

 

在Collection接口描述了一個抽象方法iterator方法,所有Collection子類都實現了這個方法,並且有自己的迭代形式

 

 

 

package com.oracle.demo01;

 

 

import java.util.Iterator;

import java.util.LinkedHashMap;

 

public class Demo02 {

    public static void main(String[] args) {

        LinkedHashMap<Person, String> map = new LinkedHashMap<Person, String>();

        Person p1 = new Person("趙四", 18);

        Person p2 = new Person("張三", 18);

        Person p3 = new Person("熊大", 19);

        map.put(p1, "Java1班");

        map.put(p2, "Java2班");

        map.put(p3, "Java3班");

        //遍歷

        Iterator<Person> it=map.keySet().iterator();

        while (it.hasNext()) {

            Person key = it.next();

            String value=map.get(key);

            System.out.println(key+"   "+value);

        }

    }

}

運行結果:

 

 

2.2      集合元素的向下轉型(強轉)

在Collection接口描述了一個抽象方法iterator方法,所有Collection子類都實現了這個方法,並且有自己的迭代形式。

 

 

 

 增強for循環

格式:

for(元素的數據類型 變量 : Collection集合or數組){

}

 

注意:新for循環必須有被遍歷的目標。目標只能是Collection或者是數組。

建議:遍歷數組時,如果僅為遍歷,可以使用增強for如果要對數組的元素進行 操作,使用老式for循環可以通過角標操作。


免責聲明!

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



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