中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的容器是什么

發布時間:2021-08-26 14:14:49 來源:億速云 閱讀:343 作者:chen 欄目:編程語言

這篇文章主要介紹“Java中的容器是什么”,在日常操作中,相信很多人在Java中的容器是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中的容器是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Java中有一些對象被稱為容器(container)。容器中可以包含多個對象,每個對象稱為容器中的一個元素。容器是用對象封裝的數據結構(data structure)。

充滿夢想的容器

不同的數據結構有不同的組織元素的方式,也可以有不同的操作。根據具體實施的不同,數據結構的操作效率也各有差別。Java中的容器也是這樣。我們要選擇適當的容器,以應對變化的需求。

(關于數據結構更多的內容,可參考 紙上談兵: 算法與數據結構)

數組

數組(array)是最常見的數據結構。數組是相同類型元素的有序集合,并有固定的大小(可容納固定數目的元素)。數組可以根據下標(index)來隨機存取(random access)元素。在內存中,數組通常是一段連續的存儲單元。

Java支持數組這一數據結構。我們需要說明每個數組的類型和大小。如下:

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)后面增加一個[],來說明是一個數組。使用new創建容器時,需要說明數組的大小。

我們可以使用 數組名[下標] 的方式來調用某個元素。我們可以逐個的初始化數組的元素,也可以在聲明的同時使用{}初始化數組。

對于非基本類型的數組,比如Human[],數組中存儲的是對象的引用。

我們可以調用System.arraycopy()方法來有效的復制數組:

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為想要復制出去的數組,aTo為想要復制到的數組,1為aFrom的想要復制出去的元素起始位置,0為aTo中想要存儲復制來元素的起始位置,3為所要復制的元素總數。

Collection

表(List)和集合(Set)是java.util中定義的兩個接口(interface)。這兩個接口都繼承自Collection接口。通過實施接口,我們可以獲得相應的容器。

我們之前都是使用類(class)來說明引用的類型。事實上,我們也可以用接口(interface)來說明引用的類型。該類型引用所指向的對象必須實施了該接口。

我們先來使用表(List)容器。List是有序的元素集合,所以可以使用下標來說明元素的位置。集合中的元素可以相等:

import java.util.*;public class Test
{    public static void main(String[] args)
    {
        List<String> l1 = 
new ArrayList<String>();
        l1.add("good");
        l1.add("bad");
        l1.add("shit");
        l1.remove(0);
        System.out.println(l1.get(1));
        System.out.println(l1.size());
    }
}

當我們在定義接口和創建容器時,我們使用<class>的方式來說明容器中所能容納元素的類型。我們將只能在容器中放入class類及其衍生類的對象。

容器的引用為List類型,但容器的實施為ArrayList類。這里是將接口與實施分離。事實上,同一種抽象數據結構(ADT)都可以有多種實施方法(比如棧可以實施為數組和鏈表)。這樣的分離允許我們更自由的選擇ADT的實施方式。

我們可以定義<Object>類型的容器。由于Java中的所有類都繼承自Object類,這樣的容器實際上可以放入任意類型的對象。

在上面的程序中,容器為String類型。我們用

  • add()方法加入新的元素

  • get()方法可以獲取容器中的元素,傳遞一個整數下標作為參數

  • remove()方法可以刪除容器中的元素,傳遞一個整數下標作為參數。(有另一個remove(),傳遞元素自身作為參數)

  • size()方法用來返回容器中元素的總數。

List的官方文檔

集合(set)也是元素的集合。集合中不允許有等值的元素,集合的元素沒有順序:

import java.util.*;public class Test
{    public static void main(String[] args)
    {
        Set<Integer> s1 = 
new HashSet<Integer>();
        s1.add(4);
        s1.add(5);
        s1.add(4);
        s1.remove(5);
        System.out.println(s1);
        System.out.println(s1.size());
    }
}

重復加入的元素4只被放入容器一次。由于Set是無序的,在remove()中,我們直接傳遞目標元素本身作為參數。

Set的官方文檔

List和Set都繼承自Collection接口。Collection代表了對象的集合。上面List和Set接口中的許多方法實際上繼承自Collection,比如:

add("good")        加入元素

size()             返回元素的總數

contains("bad")    是否包含元素

remove("good")     刪除元素

Collection的官方文檔

Collection還有一個iterator()的方法。該方法將Collection容器封裝成循環器(Iterator)。循環器是元素的集合,它有next()方法,用于每次返回一個元素,直到循環器中元素窮盡。

import java.util.*;public class Test
{    public static void main(String[] args)
    {
        List<Integer> l1 = new ArrayList<Integer>();
        l1.add(4);
        l1.add(5);
        l1.add(2);
        Iterator i = l1.iterator();        while(i.hasNext()) {
            System.out.println(i.next());
        }
    }
}

Iterator的官方文檔

Map

Map是鍵值對的集合。Map中的每個元素是一個鍵值對,即一個鍵(key)和它對應的對象值(value)。對于Map容器,我們可以通過鍵來找到對應的對象。

哈希表是Map常見的一種實施方式,參考紙上談兵: 哈希表 (hash table)

我們需要聲明Map的鍵和值的類型。我們下面實施一個HashMap:

import java.util.*;public class Test
{    public static void main(String[] args)
    {
        Map<String, Integer> m1 = new HashMap<String, Integer>();
        m1.put("Vamei", 12);
        m1.put("Jerry", 5);
        m1.put("Tom", 18);
        System.out.println(m1.get("Vamei"));
    }
}

在Map中,我們使用put()方法來添加元素,用get()方法來獲得元素。 

Map還提供了下面的方法,來返回一個Collection:

keySet()  將所有的鍵轉換為Set

values()  將所有的值轉換為List

總結

Java中,容器的接口與實施分離。這給了Java程序員更大的選擇自由,當然,也為編程增加了難度。

接口為我們提供了合法的操作。在效果層面上看,不同的實施都有相同的效果。當然,不同的情境下,實施的細節將決定運行效率。

最后,是我們提到的各個類與接口的關系:

Java中的容器是什么

到此,關于“Java中的容器是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江津市| 尚义县| 洛隆县| 滁州市| 南开区| 武汉市| 唐海县| 合水县| 舞钢市| 敦煌市| 阳城县| 诸暨市| 驻马店市| 瑞金市| 松潘县| 大宁县| 满洲里市| 芜湖县| 读书| 阳谷县| 临猗县| 临夏县| 岳阳县| 娄烦县| 六盘水市| 龙里县| 富源县| 东台市| 保山市| 兴海县| 奉节县| 成武县| 沈丘县| 襄樊市| 开封市| 武冈市| 沁阳市| 朔州市| 衡水市| 莒南县| 安庆市|