java之容器

先來一張容器的API框架圖,咱們在java中所學的全部知識,都是根據下面這張圖來學習的....java

容器API:算法

  一、Collection接口------定義了存儲一組對象的方法,其子接口Set和List分別定義了存儲的方式。框架

    ①、Set中的數據對象沒有順序且不能夠重複。學習

    ②、List中的數據對象有順序且能夠重複。this

  二、Map接口定義了存儲「鍵(key)---值(value)映射對」的方法。spa

Collection接口:code

  Collection接口中定義的方法(意思就是隻要你實現了Collection接口,你將擁有下面全部方法):對象

    

Collection方法舉例:blog

這裏要說明的就是集合裏面只能裝引用類型的數據。接口

import java.util.*;
public class TestCollection{
    public static void main (String args[]){
        Collection collection = new ArrayList();
        //能夠放入不一樣類型的對象
        collection.add("hello");
        collection.add(new Person("f1",18));
        collection.add(new Integer(100));
        System.out.println(collection.size());
        System.out.println(collection);
    }
}
class Person{
    private String name; 
    private int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
}

接下來,咱們繼續使用上面的例子,說說Collection裏面remove()方法的使用:

import java.util.*;
public class TestCollection{
    public static void main (String args[]){
        Collection collection = new HashSet();
        //能夠放入不一樣類型的對象
        collection.add("hello");
        collection.add(new Person("f1",18));
        collection.add(new Integer(100));
        
        collection.remove("hello");
        collection.remove(new Integer(100));
        
        System.out.println(collection.remove(new Person("f1",18)));
        System.out.println(collection);
    }
}
class Person{
    private String name; 
    private int age;
    public Person(String name,int age){    
        this.name = name;
        this.age = age;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    /*public boolean equals(Object obj){
        if(obj instanceof Person){
            Person person = (Person)obj;
            return (name.equals(person.name) && age == person.age);
        }
        return super.equals(obj);
    }
    public int hashCode(){
        return name.hashCode();
    }*/
}

執行上面的例子,你會發現咱們插入的數據」hello「和new Integer(100)均可以用remove()方法直接刪除,可是對於new person("f1",18)這對象能夠用remove()方法直接刪除嗎?答案是不能夠的....

容器類對象在調用remove、contains等方法時須要比較對象是否相等,這會涉及到對象類型的equals方法和hashCode方法;對於自定義的類型,須要重寫equals方法和hashCode方法以實現自定義對象相等規則。

  注意,相等的對象應該具備相等的hash Codes

 

Ieterator接口(簡單說:Iterator就是一個統一的遍歷咱們集合中全部元素的方法)

  一、全部實現了Collection接口的容器類都有一個iterator方法用以返回一個實現了Iterator接口的對象。

  二、Iterator對象稱做迭代器,用以方便的實現對容器元素的遍歷實現。

  三、Iterator實現了下列方法:

下面咱們寫一個用Iterator遍歷集合元素的方法。(注:程序運行信息輸出順序可能跟咱們輸入的順序不一致,這就是Set集合無序的效果)

import java.util.*;
public class TestCollection{
    public static void main (String args[]){
        Collection collection = new HashSet();
        
        collection.add(new Person("zhang",1));
        collection.add(new Person("gao",2));
        collection.add(new Person("wang",3));
        collection.add(new Person("du",4));
        collection.add(new Person("liang",5));
        collection.add(new Person("li",6));
        
        Iterator iterator = collection.iterator();
        while(iterator.hasNext()){
            //next()的返回值類型是Object類型,須要轉換爲相應類型
            Person person = (Person)iterator.next();
            System.out.println(person.name);
        }
    }
}
class Person{
    public String name; 
    private int age;
    public Person(String name,int age){    
        this.name = name;
        this.age = age;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
}

Set接口

  一、Set接口是Collection的子接口,Set接口沒有提供的額外方法,但實現Set接口的容器類中的元素是沒有順序的,並且不能夠重複

  二、Set接口能夠與數學中」集合「的概念相對應。

  三、J2SDK API中所提供的容器類有HashSet、TreeSet等...

Set方法舉例:

 Set方法舉例:

List接口:

  一、List接口是Collection的子接口,實現List接口的容器類中元素是有順序的,並且能夠重複。

  二、List容器中元素都對應一個整數型的序號記載其在內容中的位置,能夠根據序號存取容器中的元素。

  三、L2SDK所提供的List容器類有ArrayList,LinkedList等...

List  方法舉例:

  List經常使用算法:

List經常使用算法舉例:

相關文章
相關標籤/搜索