Java集合-Python数据结构比较
转自:https://www.cnblogs.com/kingofkai/p/5901494.html
作者:欲戴王冠.必承其重
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() |
更新 | 谈不上更新 | 谈不上更新 |