集合
集合
一般定義為:由一個或多個確定的元素所構成的整體
比如頭條的頻道就是個集合:
我們也可以把小程式看做集合:
集合一般有下面兩個特點:
一、
集合裡的元素型別不一定相同
。 你可以將商品看作一個集合,也可以將整個商店看作一個集合,這個商店中有人或者其他物品也沒有關係。
二、
集合裡的元素沒有順序
。 我們不會這樣講:我想要集合中的第三個元素,因為集合是沒有順序的。
列表
列表
(又稱線性列表)的定義為:是一種資料項構成的有限序列,即按照一定的線性順序,排列而成的資料項的集合。
列表的概念是在集合的特徵上形成的,它具有順序,且長度是可變的。你可以把它看作一張購物清單:
購物清單
在這張清單中:
購物清單中的條目代表的型別可能不同,但是按照一定順序進行了排列;
購物清單的長度是可變的,你可以向購物清單中增加、刪除條目。
在程式語言中,列表最常見的表現形式有
陣列
和
連結串列
,而我們熟悉的
棧
和
佇列
則是兩種特殊型別的列表。除此之外,向列表中新增、刪除元素的具體實現方式會根據程式語言的不同而有所區分。
陣列
陣列
是列表的實現方式之一,正如前面提到的,陣列是列表的實現方式,它具有列表的特徵,同時也具有自己的一些特徵
然而,在具體的程式語言中,陣列這個資料結構的實現方式具有一定差別。比如 C++ 和 Java 中,陣列中的元素型別必須保持一致,而 Python 中則可以不同。Python 中的陣列叫做 list,具有更多的高階功能
怎麼區分列表和陣列呢?
這裡有一個重要的概念:
索引
陣列會用一些名為 索引 的數字來標識每項資料在陣列中的位置,且在大多數程式語言中,索引是從 0 算起的。我們可以根據陣列中的索引,快速訪問陣列中的元素。
索引
而列表中沒有索引,這是陣列與列表最大的不同點。
其次,陣列中的元素在記憶體中是連續儲存的,且每個元素佔用相同大小的記憶體。
連續儲存
相反,列表中的元素在記憶體中可能彼此相鄰,也可能不相鄰。比如列表的另一種實現方式——連結串列,它的元素在記憶體中則不一定是連續的。
總結:
集合:無順序,型別無限制,地址無關;
列表:無索引,有順序,型別無限制,地址可相鄰,也可不相鄰;
陣列:有索引,有順序,型別相同,地址相鄰