【Java基礎】--Java容器剖析:collection容器
背景:
起初,Java應該先有的陣列。陣列是一種高效儲存和隨機訪問物件引用序列的方式,在效率和型別檢查方面很有優勢,但是當建立一個陣列物件的時候,陣列的大小也就固定了。為了滿足想要多少分配空間,就能佔多少,容器就誕生了~~
概念:
Java API所提供的一系列類的例項,用於在程式中存放物件。下圖是容器的API框架圖:
JDK提供的容器:
Set:資料物件無序,不可重複
List:資料物件有序 ,可重複
附:重複就是通過equals方法對比的結果
Map:介面定義了儲存“鍵(key)-值(value)對映對”的方法。
Collection介面:
Collection介面定義了儲存的一組物件的方法,其子介面Set和List分別細化了儲存的方式。
Demo程式碼:
例項化一個ArrayList物件,實現父Collection介面,通過add方法新增兩個元素,並列印c容器的大小和內容。
import java.util.*;
public class Main {
public static void main(String[] args) {
Collection c=new ArrayList();//父類Collection例項化一個子類物件ArrayList
//可以放入不同的物件。
c.add("hello");
c.add(new Integer(100));
System.out.println(c.size());
System.out.println(c);
}
}
注意:
為啥要寫Collection c=new ArrayList();父類指向子類的介面,這樣例項化的物件裡面只擁有父類方法的具體實現。假如根據需要,不例項化ArrayList了,改成LinkList了,只需要修改ArrayList出即可使用,體現了程式碼的靈活性。
Collection Remove程式碼:
跟上面的程式碼比,新增了remove方法的使用,呼叫Collection的add方法後移除remove,輸出操作後的結果。
import java.util.*;
public class Main {
public static void main(String[] args) {
Collection c=new HashSet();
//可以放入不同的物件。
c.add("hello");
c.add(new Name("f1","l1"));
c.add(new Integer(100));
//新新增移除remove方法
c.remove("hello");
c.remove(new Integer (100)); //移除的時候,有一個equals的對比。
System.out.println(c.remove(new Name("f1","l1")));
System.out.println(c);
}
}
class Name{
private String firstName,lastName;
public Name(String firstName,String lastName){
this.firstName=firstName;
this.lastName=lastName;
}
public String getFirstName(){return firstName;}
public String getLashName(){return lastName;}
public String toString(){return firstName + " " + lastName;}
public boolean equals(Object obj){
if(obj instanceof Name){
Name name=(Name) obj;
return (firstName.equals(name.firstName)) &&(lastName.equals(name.lastName));
}
return super.equals(obj);
}
public int hashCode(){
return firstName.hashCode();
}
}
輸出結果:
在作為索引的時候,重寫equals的時候要重寫hashcode.
Iterator介面:
Iterator就是一個統一遍歷Collection所有元素的方法。
1、所有實現了Collection介面的容器類都有一個iterator方法用以返回一個實現了Iterator介面的物件。
2、Iterator物件稱作迭代器,用以方便的實現對容器元素的遍歷實現。
3、Iterator實現了下列方法:
Iterator例項程式碼:
import java.util.*;
public class Main {
public static void main(String[] args) {
Collection c=new HashSet();
c.add(new Name("f1","l1"));
c.add(new Name("f3","l3"));
c.add(new Name("f5","l5"));
//統一遍歷Collection裡面所有的元素
Iterator i=c.iterator();
while(i.hasNext()){
Name n=(Name)i.next();
System.out.println(n.getFirstName()+" ");
}
}
}
class Name{
private String firstName,lastName;
public Name(String firstName,String lastName){
this.firstName=firstName;
this.lastName=lastName;
}
public String getFirstName(){return firstName;}
public String getLashName(){return lastName;}
public String toString(){return firstName + " " + lastName;}
public boolean equals(Object obj){
if(obj instanceof Name){
Name name=(Name) obj;
return (firstName.equals(name.firstName)) &&(lastName.equals(name.lastName));
}
return super.equals(obj);
}
public int hashCode(){
return firstName.hashCode();
}
}
輸出結果:
注意:
Iterator物件的remove方法是在迭代過程中刪除元素的唯一的安全方法。使用的過程中拒絕其他的remove方法。
下面一篇將為大家繼續深入講解Java容器,有興趣的朋友可以繼續關注我的部落格!
相關文章
- 【Java基礎】--Java容器剖析:Set、List、Map介面Java
- [Java基礎]容器Java
- Java Collection介面 ArrayList集合(容器)Java
- [Java基礎]collectionJava
- Java容器Java
- Java&Android 基礎知識梳理(8) 容器類JavaAndroid
- java 容器類Java
- java容器-IteratorJava
- Java之容器Java
- 容器化基礎
- Java同步容器和併發容器Java
- 【Java基礎】--深入剖析基礎語法Java
- Android基礎之Java集合框架CollectionAndroidJava框架
- Java 基礎(三)集合原始碼解析 CollectionJava原始碼
- 容器(一)剖析面試最常見問題之 Java 集合框架面試Java框架
- Java併發容器Java
- 轉載 Java容器Java
- JAVA容器簡述Java
- Java容器詳解Java
- java-容器 02Java
- Java 容器和泛型(1)認識容器Java泛型
- spring boot基於Java的容器配置Spring BootJava
- 詳解Java 容器(第⑤篇)——容器原始碼分析 - 併發容器Java原始碼
- Java進階06 容器Java
- Java容器工具類ArraysJava
- Java 容器系列總結Java
- 基於JDK1.8,Java容器原始碼分析JDKJava原始碼
- 詳解Java 容器(第③篇)——容器原始碼分析 - ListJava原始碼
- 詳解Java 容器(第④篇)——容器原始碼分析 - MapJava原始碼
- Java併發(9)- 從同步容器到併發容器Java
- Docker_04 容器-基礎操作Docker
- Java進階容器學習Java
- Java 容器學習之 HashMapJavaHashMap
- java容器新增一組元素Java
- java容器之Set常用方法Java
- Java知識點總結(Java容器-List)Java
- Java知識點總結(Java容器-Vector)Java
- Java知識點總結(Java容器-Set)Java