Java程序员,一周Python入门:数组,元组,集合,集合,字典
今天来对比学习一下存储的方式。
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<K, V> 作为 2 元组)
import java.util.AbstractMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        Map.Entry<Integer, String> 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<String> 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<String> 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<String, Integer> 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<K, V> entry : map.entrySet()) | 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 语言的数组。
接下来把判断语句和循环搞定之后就能写程序了,加油!!
相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
- Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
- Spring Boot+Pinot实战:毫秒级实时竞价系统构建
- SpringBoot敏感配置项加密与解密实战
- SpringBoot 注解最全详解,建议收藏!
- Spring Boot 常用注解大全:从入门到进阶
- SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
- Springboot集成Kafka原理_spring集成kafka的原理
- Spring Boot中@Data注解的深度解析与实战应用
- 大佬用1000字就把SpringBoot的配置文件讲的明明白白!

