新聞中心
這篇文章主要介紹“Java中的容器是什么”,在日常操作中,相信很多人在Java中的容器是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中的容器是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián),專注為中小企業(yè)提供官網(wǎng)建設、營銷型網(wǎng)站制作、響應式網(wǎng)站開發(fā)、展示型做網(wǎng)站、成都網(wǎng)站建設等服務,幫助中小企業(yè)通過網(wǎng)站體現(xiàn)價值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設與網(wǎng)站營銷推廣問題。
Java中有一些對象被稱為容器(container)。容器中可以包含多個對象,每個對象稱為容器中的一個元素。容器是用對象封裝的數(shù)據(jù)結(jié)構(gòu)(data structure)。
充滿夢想的容器
不同的數(shù)據(jù)結(jié)構(gòu)有不同的組織元素的方式,也可以有不同的操作。根據(jù)具體實施的不同,數(shù)據(jù)結(jié)構(gòu)的操作效率也各有差別。Java中的容器也是這樣。我們要選擇適當?shù)娜萜?,以應對變化的需求?/p>
(關于數(shù)據(jù)結(jié)構(gòu)更多的內(nèi)容,可參考 紙上談兵: 算法與數(shù)據(jù)結(jié)構(gòu))
數(shù)組
數(shù)組(array)是最常見的數(shù)據(jù)結(jié)構(gòu)。數(shù)組是相同類型元素的有序集合,并有固定的大小(可容納固定數(shù)目的元素)。數(shù)組可以根據(jù)下標(index)來隨機存取(random access)元素。在內(nèi)存中,數(shù)組通常是一段連續(xù)的存儲單元。
Java支持數(shù)組這一數(shù)據(jù)結(jié)構(gòu)。我們需要說明每個數(shù)組的類型和大小。如下:
public class Test { public static void main(String[] args) { Human[] persons = new Human[2]; // array size 2 persons[0] = new Human(160); persons[1] = new Human(170); int[] a = {1, 2, 3, 7, 9}; // array size 5 System.out.println(a[2]); String[] names = {"Tom", "Jerry", "Luffy"}; // array size 3 System.out.println(names[0]); } }
在說明類型時,在類型說明(Human)后面增加一個[],來說明是一個數(shù)組。使用new創(chuàng)建容器時,需要說明數(shù)組的大小。
我們可以使用 數(shù)組名[下標] 的方式來調(diào)用某個元素。我們可以逐個的初始化數(shù)組的元素,也可以在聲明的同時使用{}初始化數(shù)組。
對于非基本類型的數(shù)組,比如Human[],數(shù)組中存儲的是對象的引用。
我們可以調(diào)用System.arraycopy()方法來有效的復制數(shù)組:
public class Test { public static void main(String[] args) { int[] aFrom = {1, 2, 3, 7, 9}; // array size 5 int[] aTo = new int[3]; System.arraycopy(aFrom, 1, aTo, 0, 3); System.out.println(aTo[1]); } }
System.arraycopy()中,aFrom為想要復制出去的數(shù)組,aTo為想要復制到的數(shù)組,1為aFrom的想要復制出去的元素起始位置,0為aTo中想要存儲復制來元素的起始位置,3為所要復制的元素總數(shù)。
Collection
表(List)和集合(Set)是java.util中定義的兩個接口(interface)。這兩個接口都繼承自Collection接口。通過實施接口,我們可以獲得相應的容器。
我們之前都是使用類(class)來說明引用的類型。事實上,我們也可以用接口(interface)來說明引用的類型。該類型引用所指向的對象必須實施了該接口。
我們先來使用表(List)容器。List是有序的元素集合,所以可以使用下標來說明元素的位置。集合中的元素可以相等:
import java.util.*;public class Test { public static void main(String[] args) { Listl1 = new ArrayList (); l1.add("good"); l1.add("bad"); l1.add("shit"); l1.remove(0); System.out.println(l1.get(1)); System.out.println(l1.size()); } }
當我們在定義接口和創(chuàng)建容器時,我們使用
容器的引用為List類型,但容器的實施為ArrayList類。這里是將接口與實施分離。事實上,同一種抽象數(shù)據(jù)結(jié)構(gòu)(ADT)都可以有多種實施方法(比如??梢詫嵤閿?shù)組和鏈表)。這樣的分離允許我們更自由的選擇ADT的實施方式。
我們可以定義