如何區分集合、列表、陣列

集合

集合

一般定義為:由一個或多個確定的元素所構成的整體

比如頭條的頻道就是個集合:

如何區分集合、列表、陣列

我們也可以把小程式看做集合:

如何區分集合、列表、陣列

集合一般有下面兩個特點:

一、

集合裡的元素型別不一定相同

。 你可以將商品看作一個集合,也可以將整個商店看作一個集合,這個商店中有人或者其他物品也沒有關係。

二、

集合裡的元素沒有順序

。 我們不會這樣講:我想要集合中的第三個元素,因為集合是沒有順序的。

列表

列表

(又稱線性列表)的定義為:是一種資料項構成的有限序列,即按照一定的線性順序,排列而成的資料項的集合。

列表的概念是在集合的特徵上形成的,它具有順序,且長度是可變的。你可以把它看作一張購物清單:

如何區分集合、列表、陣列

購物清單

在這張清單中:

購物清單中的條目代表的型別可能不同,但是按照一定順序進行了排列;

購物清單的長度是可變的,你可以向購物清單中增加、刪除條目。

在程式語言中,列表最常見的表現形式有

陣列

連結串列

,而我們熟悉的

佇列

則是兩種特殊型別的列表。除此之外,向列表中新增、刪除元素的具體實現方式會根據程式語言的不同而有所區分。

陣列

陣列

是列表的實現方式之一,正如前面提到的,陣列是列表的實現方式,它具有列表的特徵,同時也具有自己的一些特徵

然而,在具體的程式語言中,陣列這個資料結構的實現方式具有一定差別。比如 C++ 和 Java 中,陣列中的元素型別必須保持一致,而 Python 中則可以不同。Python 中的陣列叫做 list,具有更多的高階功能

怎麼區分列表和陣列呢?

這裡有一個重要的概念:

索引

陣列會用一些名為 索引 的數字來標識每項資料在陣列中的位置,且在大多數程式語言中,索引是從 0 算起的。我們可以根據陣列中的索引,快速訪問陣列中的元素。

如何區分集合、列表、陣列

索引

而列表中沒有索引,這是陣列與列表最大的不同點。

其次,陣列中的元素在記憶體中是連續儲存的,且每個元素佔用相同大小的記憶體。

如何區分集合、列表、陣列

連續儲存

相反,列表中的元素在記憶體中可能彼此相鄰,也可能不相鄰。比如列表的另一種實現方式——連結串列,它的元素在記憶體中則不一定是連續的。

總結:

集合:無順序,型別無限制,地址無關;

列表:無索引,有順序,型別無限制,地址可相鄰,也可不相鄰;

陣列:有索引,有順序,型別相同,地址相鄰

如何區分集合、列表、陣列