Java中的集合

一.Java中集合的概念

1.数组和集合的区别:

在Java中,数组和集合都是用于存储多个元素的数据结构

但是数组是Java中内置的数据结构,且在声明数组时必须指定数组类型和元素大小(大小固定,声明后就不能更改数组的大小了)

如:

java 复制代码
int[] arr = new int[5];

而集合是Java框架(java.util包)中的一组接口和类

集合可以动态调整大小(自动扩容)

如:

java 复制代码
List<Integer> list = new ArrayList<>();

除了类型和定义,大小可变与否,数组和集合还有几点点值得关注的区别:

1.数组可以存储基本数据类型,如int、char等,也可以存储引用数据类型,如String、Object等

而集合只能存储引用类型(对象),若要用集合存储基本类型,则必须使用对应的包装类

2.数组不支持泛型,集合支持泛型

3.数组天然支持多维,集合要通过嵌套才能实现多维集合

4.数组功能没有集合丰富,数组仅支持基本的索引访问和遍历,集合提供了额外的增删改查等操作

2.什么是包装类:

Java是一种面向对象的编程语言,但为了效率,它提供了8种基本数据类型,如int、char、boolean等

然而这些基本类型不是对象,不能直接用于需要对象的场景(如集合List、泛型、反射等)

为了解决这个问题,Java为每种基本类型都提供了一个对应的包装类,将基本类型"包装"成对象。

基本类型 包装类(位于 java.lang 包)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

注:所有的包装类都是final类(不可继承),并且是不可变对象(一旦创建,不可以更改)

而在集合中,只能存储引用类型的数据,且泛型只接受引用类型。所以在使用集合存储基本数据类型的数据时,要使用它们的包装类

3.名词解释:装箱和拆箱

1.装箱

把基本类型转换为对应的包装类对象

早期的Java都是手动装箱,如:

java 复制代码
int num = 100;
Integer obj = new Integer(num); // 已过时(JDK 9+ 废弃构造器)
// 或
Integer obj = Integer.valueOf(num); // 推荐方式

现在普通是自动装箱

如:

java 复制代码
int num = 100;
Integer obj = num; // 自动调用 Integer.valueOf(num)

2.拆箱

把包装类对象转换为基本类型

手动插箱:

java 复制代码
Integer obj = new Integer(100);
int num = obj.intValue();

自动拆箱:

java 复制代码
Integer obj = 100;
int num = obj; // 自动调用 obj.intValue()

二.集合的简单使用

java 复制代码
package arraylistdemo;

import java.util.ArrayList;

public class ArrayListDemo1 {
    // 集合是用于存储对象的容器,提供了比数组更灵活的数据结构操作能力
    // 区别:
    // 集合的大小是动态变化的,数组在创建时就固定了大小
    // 集合主要用于存储对象,但可以通过泛型指定类型。数组只能存储类型相同的数据(基本类型或对象)
    // 集合提供了丰富的操作方法,但可能有额外的性能开销。数组访问速度快,内存连续分配
    public static void main(String[] args){
        // 泛型:用于确定集合中存储的对象类型,用<>括起来
        ArrayList<String> list = new ArrayList<String>();
        System.out.println(list); // []
        System.out.println(list.add("hello")); // true 表示添加成功
        System.out.println(list.add("world"));
        list.add("java");
        list.add("javascript");
        System.out.println(list); // [hello, world, java, javascript]
        // 删除元素
        System.out.println(list.remove("hello")); // true
        System.out.println(list); // [world, java, javascript]
        System.out.println(list.remove("hello")); // false 表示删除失败
        // remove()方法还可以根据索引删除
        System.out.println(list.removeFirst()); // world
        // 修改元素
        System.out.println(list.set(1,"JavaScript")); // javascript
        System.out.println(list); // [java, JavaScript]
        // 获取集合的长度
        System.out.println(list.size()); // 2

        // 遍历集合
        for (int i = 0; i < list.size(); i++){
            System.out.println(list.get(i)); // get()方法用于按索引获取集合中的元素
        }
    }
}
java 复制代码
package arraylistdemo;

import java.util.ArrayList;

public class ArrayListDemo2 {
    // 定义一个集合,添加数字并进行遍历
    public static void main(String[] args){
        // 集合存储的是对象,但是可以通过自动装箱机制使得基本类型被自动转换为对应的包装类
        // 包装类的映射关系:
        // int -> Integer
        // char -> Character
        // boolean -> Boolean
        // float -> Float
        // double -> Double
        // long -> Long
        // short -> Short
        // byte -> Byte
        ArrayList<Integer> list = new ArrayList<>();
        // 添加元素
        list.add(10);
        list.add(20);
        list.add(30);
        for (Integer integer : list) {
            System.out.println(integer);
        }
    }
}
相关推荐
人邮异步社区1 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大2 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai2 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说2 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
এ慕ོ冬℘゜2 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa2 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行2 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
Zane19943 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了3 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品3 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库