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);
        }
    }
}
相关推荐
无心水12 小时前
2、5分钟上手|PyPDF2 快速提取PDF文本
java·linux·分布式·后端·python·架构·pdf
小元宝的专属厨师12 小时前
day08_LinkedList与队列栈
java
xyq202412 小时前
W3C CSS 活动
开发语言
Han_han91912 小时前
案例二:交通工具调度系统(核心:继承 + 多态 + final + 方法重写)
java·开发语言
沐知全栈开发12 小时前
CSS Float(浮动)
开发语言
小张-森林人12 小时前
电子病历文书编辑器 Demo
开发语言·c#
cch891812 小时前
Java vs 汇编:高级与低级的终极对决
java·开发语言·汇编
2301_7890156212 小时前
C++:异常
开发语言·c++·异常·异常的处理方式
码上实战12 小时前
到底Java 适不适合做 AI 呢?
java·人工智能·后端·python·ai
CVer儿12 小时前
c++接口内部内存分配问题设计
开发语言·c++