Java中常用集合类和泛型的学习

Java集合框架主要包括两种类型的容器:集合(Collection)和  图(Map),Collection接口又有三种子类型:ListSetQueue。每种类型都有多个具体实现类,今天我们主要学习几个常用的集合类。

Collection

List

List接口扩展自Collection,它可以定义一个允许重复的有序集合。常用的实现类有:

1.ArrayList

ArrayList是Java提供的动态数组实现,属于java.util包

import java.util.ArrayList;

ArrayList<String> list = new ArrayList<>();

其常用构造函数如下

ArrayList<E> list = new ArrayList<>();             // 默认初始容量10
ArrayList<E> list = new ArrayList<>(int capacity); // 指定初始容量
ArrayList<E> list = new ArrayList<>(Collection);   // 用其他集合初始化

 常用方法有

add(E e)添加元素
add(int index, E e)指定位置插入
get(int index)获取指定位置元素
set(int index, E e)替换指定位置元素
remove(int index)删除指定位置元素
remove(Object o)删除第一个匹配对象
size()获取元素个数
isEmpty()是否为空
contains(Object o)是否包含元素
clear()清空列表
indexOf(Object o)返回元素第一次出现位置
toArray()转换成数组

2.LinkedList

LinkedList是一个双向链表实现,属于java.util包,通过节点连接,每个节点包含指向前后节点的指针。

其常用构造函数如下

LinkedList<E> list = new LinkedList<>();       // 创建空链表
LinkedList(E elements[])  // 初始化链表,存储给定数组元素

LinkedList实现了List接口,也包含一些ArrayList中的常用方法如(add(),get(),size()等),除此之外,还包含以下特有方法:

addFirst(E e)在链表头部添加元素
addLast(E e)在链表尾部添加元素
removeFirst()删除链表头部元素
removeLast()删除链表尾部元素
getFirst()获取链表头部元素
getLast()获取链表尾部元素
offerFirst(E e)在链表头部插入元素(比 addFirst 更安全)
offerLast(E e)在链表尾部插入元素
peekFirst()获取头部元素,但不删除
peekLast()获取尾部元素,但不删除
pollFirst()获取并删除头部元素
pollLast()获取并删除尾部元素

Set

HashSet

HashSet是Java中最常用的Set实现类,基于Hashmap实现, 不能存储重复元素,元素无序(即非插入顺序),最多只能有一个 null 元素

import java.util.HashSet;

HashSet<String> set = new HashSet<>();

常用构造方法有

HashSet<E> set = new HashSet<>();               // 默认初始容量 16,负载因子 0.75
HashSet<E> set = new HashSet<>(int initialCapacity);      // 指定容量
HashSet<E> set = new HashSet<>(int initialCapacity, float loadFactor); // 指定容量和负载因子
HashSet<E> set = new HashSet<>(Collection<? extends E> c); // 用集合创建

 常用方法(继承自abstract Set)

add(E e)添加元素,若已存在则添加失败
remove(Object o)删除元素
contains(Object o)判断是否存在
size()返回元素个数
isEmpty()判断是否为空
clear()清空所有元素
iterator()返回迭代器
toArray()转数组
retainAll(Collection c)取交集
addAll(Collection c)并集
removeAll(Collection c)差集

Queue

LinkedList

这与实现List接口的LinkedList是同一个类(具体方法可向上翻),是唯一一个既实现了List又实现了Queue和Deque的类

项目List 接口视角Queue 接口视角
支持的操作随机访问(get/set)队列操作(offer/poll/peek)
添加元素add(index, E)offer(E)
获取元素get(index)peek()
删除元素remove(index)poll()
应用场景有序列表消息队列、任务调度
面向的接口ListQueue(实际上是 Deque

Map

HashMap

HashMap是基于HashTable实现的Map,存储键值对,允许null键和null值,非线程安全

常用方法有

Map<String, Integer> map = new HashMap<>();

map.put("apple", 5);       // 添加键值对
map.get("apple");          // 获取值
map.containsKey("apple");  // 是否包含 key
map.remove("apple");       // 删除 key
map.size();                // 元素数量
map.keySet();              // 所有 key
map.values();              // 所有 value
map.entrySet();            // 所有 key-value 对

HashTable 

HashTable是 Java 最早(JDK 1.0)引入的一个键值对映射容器,不允许null键或值,线程安全

常用方法如下

import java.util.Hashtable;

Hashtable<String, String> table = new Hashtable<>();

// 添加键值对
table.put("name", "Alice");

// 获取值
System.out.println(table.get("name")); // 输出:Alice

// 是否包含 key
table.containsKey("name");

// 删除键值对
table.remove("name");

// 获取所有键
table.keySet();

泛型

泛型(Generics)是 Java 中的一个机制,它允许你在类、接口、方法的定义中使用 类型参数,使得代码在编译时更加类型安全,并且可以重用类型,避免类型转换的错误。

泛型的基本语法如下:

// 定义一个泛型类
class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

// 使用泛型类
Box<Integer> intBox = new Box<>();
intBox.setValue(10);
System.out.println(intBox.getValue());  // 输出: 10

通配符 

在泛型中,我们还可以使用通配符来表示 不确定类型,常见的通配符有两种:

? extends T(上界通配符)

表示类型是T或T的子类型 

public static void printNumbers(List<? extends Number> list) {
    for (Number num : list) {
        System.out.println(num);
    }
}
? super T(下界通配符)

表示类型是T或T的父类型 

public static void addNumbers(List<? super Integer> list) {
    list.add(10);  // 可以添加 Integer 或其父类类型(如 Number)
}

泛型的限制:

1.泛型类型不能为基本数据类型 

2.不能直接创建一个泛型类型的数组,但可以通过 Object 类型来间接创建

3.不能使用泛型类型创建静态字段

常见泛型类型参数

类型描述
TType,表示某种类型(常用)
EElement,表示集合中的元素(如 List<E>
KKey,表示键(如 Map<K, V>
VValue,表示值(如 Map<K, V>
NNumber,表示数字类型

以上就是对Java中常用集合类和泛型的学习,底层原理建议后续再深入学习,在此不多赘述,如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值