Java程序员,一周Python入门:数组,元组,集合,集合,字典
xsobi 2025-04-06 00:04 3 浏览
今天来对比学习一下存储的方式。
Java 和 Python 在数据结构方面有很多不同之处,特别是 列表(List)、元组(Tuple)、集合(Set)、字典(Dict/Map) 的使用方式。
Python 原生支持 元组(Tuple),而 Java支持数组且没有内置的 Tuple 类型,通常需要使用第三方库或自定义类来模拟。
1. 元组(Tuple),一种有序列表
特性 | Java(无内置 Tuple,需第三方库或自定义) | Python(tuple) |
定义方式 | new AbstractMap.SimpleEntry<>(key, value)(模拟) | tup = (1, "hello", True) |
是否可变 | (不可变,需使用 ImmutablePair 等) | (不可变) |
是否有序 | ||
允许重复元素 | ||
索引访问 | ||
应用场景 | 方法返回多个值、键值对存储 | 方法返回多个值、键值对存储 |
示例
Java(使用 AbstractMap.SimpleEntry 作为 2 元组)
import java.util.AbstractMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map.Entry tuple = new AbstractMap.SimpleEntry<>(1, "hello");
System.out.println(tuple.getKey()); // 1
System.out.println(tuple.getValue()); // hello
}
}
Python
tup = (1, "hello", True)
print(tup[0]) # 1
print(tup[1]) # hello
tup = (1,["a","b"])
tup[1][0] = "x"
tup[1][1] = "y"
print(tup) # (1,["x","y"])
区别
- Java 没有内置 Tuple,需要 AbstractMap.SimpleEntry<> 或第三方库(如 Apache Commons Lang 的 ImmutablePair<>)。
- Python 原生支持 Tuple,适合方法返回多个值,且比 list 更节省内存。tuple和list非常类似,但是tuple一旦初始化就不能修改。这个不能修改说的是指向,或者说是内存地址,如果放的是一个list,list里面的值是可以修改的。快去实验一下。
2. 列表(List)
特性 | Java(ArrayList) | Python(list) |
是否可变 | (可变) | (可变) |
是否有序 | ||
允许重复元素 | ||
索引访问 | ||
应用场景 | 变长数组存储、动态列表 | 变长数组存储、通用列表 |
示例
Java
import java.util.ArrayList;
import java.util.List;
List list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println(list.get(0)); // apple
Python
list_var = ["apple", "banana",1,True]
print(list_var[0]) # apple
区别
- Java 需要 ArrayList<>,泛型需要声明。
- Python 直接使用 list,可以存放不同类型数据。
3. 集合(Set)
特性 | Java(HashSet) | Python(set) |
是否可变 | (可变) | (可变) |
是否有序 | (无序) | (无序) |
允许重复元素 | (自动去重) | (自动去重) |
索引访问 | (不支持索引) | (不支持索引) |
应用场景 | 去重存储、集合运算 | 去重存储、集合运算 |
示例
Java
import java.util.HashSet;
import java.util.Set;
Set set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); // 重复项不会被添加
System.out.println(set); // [apple, banana]
Python
set_var = {"apple", "banana", "apple"} # 重复项不会被添加
print(set_var) # {'apple', 'banana'}
区别
- Java 需要 new HashSet<>(),Python 直接 {} 定义。
- Python 支持 set 直接进行并集、交集、差集运算,如 set1 | set2,Java 需要 addAll()。
4. 字典(Dict/Map)
特性 | Java(HashMap) | Python(dict) |
是否可变 | (可变) | (可变) |
是否有序 | (无序) | (Python 3.7+ 按插入顺序) |
是否允许重复 Key | (Key 唯一) | (Key 唯一) |
是否允许 null Key | (允许 null) | (允许 None) |
是否允许 null Value | ||
索引访问 | (map.get(key)) | (dict[key]) |
应用场景 | 关联存储、键值对查询 | 关联存储、键值对查询 |
示例
Java
import java.util.HashMap;
import java.util.Map;
Map map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
System.out.println(map.get("apple")); // 10
Python
dict_var = {"apple": 10, "banana": 20}
print(dict_var["apple"]) # 10
区别
- Java 需要 put() 方法添加键值对,Python 直接 dict_var[key] = value。
- Python 3.7+ 的 dict 默认有序(按插入顺序),Java HashMap<> 无序。
5. 数据结构 API 对比
操作 | Java(List/Set/Map) | Python(list/tuple/set/dict) |
新增元素 | list.add(val) | list.append(val) |
删除元素 | list.remove(val) | list.remove(val) |
获取索引元素 | list.get(index) | list[index] |
字典遍历 Key-Value | for (Map.Entry | for k, v in dict_var.items(): |
集合交集 | set1.retainAll(set2) | set1 & set2 |
集合并集 | set1.addAll(set2) | `set1 |
6. 数组对比
特性 | Java(Array) | Python(list / array.array) |
是否定长 | (固定大小) | list (可变大小) / array.array (固定大小) |
类型限制 | (只能存相同类型) | list (可存多种类型) / array.array (单一类型) |
性能 | (高效) | list (较慢) / array.array (更接近 C 数组) |
适合场景 | 数值计算、大规模数据存储 | list 适合通用存储 / array.array 适合数值运算 |
6.1. Java 的数组
Java 中的数组是固定大小的,并且只能存储相同类型的数据。例如:
java复制编辑public class Main {
public static void main(String[] args) {
int[] arr = new int[5]; // 创建长度为5的数组
arr[0] = 10;
arr[1] = 20;
System.out.println(arr[0]); // 10
}
}
特点:
- 只能存储相同类型的元素(如 int[]、double[])。
- 必须声明大小,否则会报错。
6.2. Python 的数组
Python 有两种方式表示数组:
- 列表(list):动态可变,支持存储不同类型。
- 数组模块(array.array):性能更优,支持固定类型数据(类似 Java 数组)。
使用 array.array
import array
arr = array.array('i', [10, 20, 30]) # 'i' 代表存储整数
print(arr[0]) # 10
特点:
- 必须存相同类型数据(类似 Java 数组)。
- 性能比 list 更优,接近 C 语言的数组。
接下来把判断语句和循环搞定之后就能写程序了,加油!!
相关推荐
- 我把家搬进了NAS?家庭资产数字化革命,现在连袜子都有编号了!
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙家里东西一多,总有一种“我记得我有这个,但我不知道放哪了”的错觉。...
- Mega Run第3关通关攻略-跳上高空(mega运动)
-
错过火炮等于失败,这是MegaRun在上一关中给玩家的一点小挑战,那在后面的关卡中,这中挑战会给你造成什么困难呢?具体请看MegaRun第3关通关攻略-跳上高空。MegaRun第3关在一开始我...
- Axure高保真教程:中继器表格自动合计模板
-
编辑导语:合计作为日常使用频率比较高的一个功能,但在Axure里面传统的表格如果做合计是很麻烦的,遇到数据多的时候很耗费时间,那么该如何优化,提高工作效率?本文以中继器表格为核心,教大家如何制作一个自...
- 多角色登录原型(分角色登录)
-
编辑导读:多角色登录是很多系统都需要具备的功能,例如在招聘网站里,登录的角色包括、求职者、招聘企业的hr、猎头、内部员工等等。本文作者分享了如何在Axure里面制作多角色登录的原型模板,希望对你有帮助...
- 利用Axure+js创建可配置地图页面(axure地址选择)
-
编辑导语:如何利用Axure实现自定义地图展示?本篇文章里,作者结合Axure与高德地图,对如何在Axure中设置相应参数、进而预览时实现自定义地图展示效果的操作流程进行了示范和总结,一起来看一下。本...
- 纬地智能模板的一些基础与概念(纬地智能模板的一些基础与概念是什么)
-
对于公路及相关土木工程的勘测设计工作,虽然基础的理论和方法是基本相同的,但是受到各国家、地区文化、制图习惯等方面因素的影响,不同地域公路勘测设计的习惯和表达方式有着很大的差异,当然语言方面的不同和差...
- WPF界面开发第三方控件入门指南——菜单项
-
点击“了解更多”获取工具DevExpressWPFSubscription拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强...
- 鸿蒙开发:自定义一个搜索模版(鸿蒙系统怎么添加百度搜索条)
-
前言代码案例基于Api13。...
- 简单介绍一下前端各框架中的模板标签
-
在各大前端框架、小程序中,此类标签的作用主要是用来帮助我们包裹多个元素。在浏览器实际渲染中会将其移除只渲染其包裹的DOM元素,所以说不会增加额外的DOM节点...
- 法媒:简单的几个步骤让你的运动鞋更加炫酷
-
【环球网综合报道】有没有觉得自己的运动鞋样式单调,希望它变得更加炫酷?法媒《ELLE》推荐了一种简单易行的装饰方法,让您的运动鞋更加时尚。制作前,您需要准备一张细毡子、一张闪光热胶合布、胶水、两个银夹...
- Blazor 代码隐藏(blazor 操作dom)
-
Razor组件通常是在单个.razor文件中创作的,这样就存在页面中包含html代码和后台代码(@code标记指定的代码)。如下...
- DevExpress WPF入门指南:DXBars, DXRibbon中使用MVVM的两种方式
-
你也可以下载Universal安装包或者到DevExpress中文网查看更多示例和教程哦本文档介绍在DXBars,DXRibbon和GalleryControl这三个控件中使用MVVM框架的...
- 干货,Uploadfive插件上传,Python接收存储
-
在Web开发工作中,经常遇到上传需求,上传照片,文件等,网上的上传插件有很多,我使用的是一款H5上传插件Uploadfive,与之对应的是Uploadify,后者是基于Flash的,不过现在越来越多的...
- 用DevExpress实现基于HTML&CSS的桌面应用程序的UI(二)
-
DevExpressWinForm拥有180+组件和UI库,能为WindowsForms...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- characterencodingfilter (33)
- getmonth (34)
- label换行 (33)
- android studio 3 0 (34)
- html转js (35)
- 索引的作用 (33)
- checkedlistbox (34)
- xmlhttp (35)
- mysql更改密码 (34)
- 权限777 (33)
- htmlposition (33)
- 学校网站模板 (34)
- textarea换行 (34)
- 轮播 (34)
- asp net三层架构 (38)
- bash (34)