Java集合-Python資料結構比較,java-python
Java list與Python list相比較
Java List:有序的,可重複的。(有序指的是集合中對象的順序與添加順序相同)
Python list(列表)是有序的,可變的。
Java List分類:
---ArrayList:底層使用數組,線程不安全,尋找速度快,增刪速度慢
在迭代過程中,對集合對象的增刪會出現異常
---LinkedList:底層使用鏈表,線程不安全,尋找速度慢,增刪速度快
後進先出,類似於棧
---Vector: 底層使用數組,安全執行緒,尋找速度快,增刪速度慢,被ArrayList替代
Python 列表無分類,list是Python的基本資料結構。
| 方法 |
Java List |
Python list:[1,'2',3] |
Python tuple:(1,2,3) |
| 增加到末尾 |
boolean add(E e); |
list.append('大帝') |
不可變 |
| 增加到指定位置 |
void add(int index, E element); |
list.insert(2,'大帝') |
不可變 |
| 長度 |
int size(); |
len(list) |
與list相同 |
| 更新 |
E set(int index, E element); |
list[i]='大帝' |
不可變 |
| 刪除 |
E remove(int index); |
list.pop(i) |
不可變 |
| 刪除所有 |
void clear(); |
list.clear() |
不可變,可以使用del刪除元組 |
| 尋找 |
E get(int index); |
list[i] |
與list相同 |
Java Map與Python dict相比較
Java Map屬於集合,但不屬於Collection體系中一部分,無序的,不可重複,以索引值對形式存在。
Python dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的尋找速度,dict的key必須是不可變對象,因為dict根據key使用雜湊演算法來計算value的儲存位置。
Java Map分類:
--- HashMap:底層使用的資料結構是雜湊表
保持鍵的唯一性同HashSet相同。
--- TreeMap:底層使用的資料結構是二叉樹
保持鍵的唯一性同TreeSet相同。
Python 字典無分類,dict是Python的基本資料結構。
| 方法 |
Java Map |
Python dict:{'1':'1','2':'2'} |
| 增加 |
V put(K key, V value); |
dict['1']='大帝' |
| 刪除 |
V remove(Object key); |
del dict['1'] |
| 更改 |
和增加相同,若鍵相同,會覆蓋原值 |
dict['1']='國王' |
| 尋找 |
V get(Object key); |
dict['1'] |
Java Set與Python set相比較
Java Set底層使用的就是Java Map的鍵,值被設定為空白,因此Set與Map保持唯一性的原理是相同的。
Python set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
Java Set:無序,不可重複
---HashSet:底層使用雜湊表,線程不安全
保證對象唯一的方式:重寫hashcode(),equals(Object obj).使用雜湊演算法導致無序
---TreeSet:底層使用二叉樹,線程不安全
在使用add方法添加對象時,會對加入集合的對象進行排序
保證對象唯一的方式:1 實現Comparable<E>介面,實現compareTo()方法的傳回值是0,則不能加入。2 建立一個類,實現Comparator<T>,實現compare() 方法。
Python 集合無分類,set是Python的基本資料結構。
| 方法 |
Java Set |
Python set |
| 建立 |
|
傳入一個list:set([1,2,3])或者直接s={1,2,3} |
| 增加 |
boolean add(E e); |
s.add(4) |
| 刪除 |
boolean remove(Object o); |
s.remove(4)/s.pop() |
| 更新 |
談不上更新 |
談不上更新 |