Java学习历程21——集成框架与常用库函数 - 详解

在日常的开发任务中,我们常常需要存储和操作大量的数据,Java本身提供了许多的集合框架,我们可以灵活运用这些集合框架和常用的库函数简化我们的开发流程。

Java集合框架是一个用于存储和操作数据的强大工具。它主要由两个根接口Collection和Map派生出来。Collection接口进一步分为List、Set和Queue三种子接口,而Map接口则用于存储键值对。本次我们主要介绍ListMap的核心常用函数。

一、List 核心常用函数

接口:java.util.List

主流实现:ArrayListLinkedList

ArrayList是动态数组,支持根据填充的数据自动扩容、根据编号删除等增删改查的功能。

LinkedList是链表结构,同样支持各种增删改查的功能。

核心函数表

函数签名功能说明核心场景
boolean add(E e)尾部添加元素基础元素插入
void add(int index, E element)指定索引插入元素中间位置插入
E get(int index)获取指定索引元素随机访问(ArrayList 优势)
E remove(int index)删除指定索引元素按位置删除
boolean remove(Object o)删除首个匹配的元素按值删除
int size()获取元素个数遍历/边界判断
boolean isEmpty()判断是否为空空值校验
void clear()清空所有元素重置列表
int indexOf(Object o)查找元素首次出现的索引 (无则返回-1)元素存在性+位置查 找
int lastIndexOf(Object o)查找元素最后出现的索引反向查找元素
List subList(int fromIndex, int toIndex) 截取子列表(视图,原列表修改同步)列表切片(如旋转数 组)
default void sort(Comparator c) 自定义比较器排序自定义规则排序 (JDK8+)
default boolean removeIf(Predicate filter) 按条件批量删除过滤元素(如移除所 有偶数)

部分方法实现示例

我们用示例代码实现后面三种方法:(以LinkedList为例)

1、subList

import java.util.LinkedList;
import java.util.List;
public class List_Study {
    public static void main(String[] args) {
        LinkedList num=new LinkedList<>();
        num.add(100);
        num.add(1000);
        num.add(10000);
        num.add(29);
        num.add(39);
        num.add(49);
        List slice1 =num.subList(0,3);
        System.out.println(num.stream().toList());
        System.out.println(slice1.stream().toList());
    }
}

2、sort

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public class List_Study {
    public static void main(String[] args) {
        LinkedList num=new LinkedList<>();
        num.add(100);
        num.add(1000);
        num.add(10000);
        num.add(29);
        num.add(39);
        num.add(49);
        num.sort(Comparator.comparingInt(a->a));//升序排列
        System.out.println(num.stream().toList());
        num.sort(Comparator.comparingInt(a->-a));//降序排列
        System.out.println(num.stream().toList());
    }
}

3、removeIf

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public class List_Study {
    public static void main(String[] args) {
        LinkedList num=new LinkedList<>();
        num.add(100);
        num.add(1000);
        num.add(10000);
        num.add(29);
        num.add(39);
        num.add(49);
        num.removeIf(a->a>=100);
        System.out.println(num.stream().toList());
    }
}

二、Map 核心常用函数

接口:java.util.Map

主流实现:HashMap、 TreeMap、LinkedHashMap

Map的主要功能是K-V存储:Key不能重复 ,存入的数据与存入时顺序的顺序无关,位置是结构内部通过固定的算法来排列 ,可以通过Key查找对应的Value。

核心函数表

函数签名功能说明核心场景
V put(K key, V value)存入键值对(键 存在则覆盖值)基础映射存储
V get(Object key)获取键对应值(无则返回 null)基础映射查找
V getOrDefault(Object key, V defaultValue)获取值,无则返回默认值计数场景避免空指针
boolean containsKey(Object key)判断是否包含指定键键存在性校验
boolean containsValue(Object value)判断是否包含指 定值值存在性校验 (效率低,慎 用)
V remove(Object key)删除指定键的键值对移除映射
Set<K> keySet()获取所有键的Set 集合遍历所有键
Collection<V> values()获取所有值的 Collection集合遍历所有值
Set<Map.Entry<K,V>> entrySet()获取所有键值对 的Set集合遍历所有键值对 (高效)
int size()获取键值对个数映射数量统计
boolean isEmpty()判断是否为空空值校验
void clear()清空所有键值对重置映射
default void forEach(BiConsumer<?super K,?super V> action遍历键值对 (Lambda)批量处理映射元素
default V putIfAbsent(K key, V value)键不存在时才存 入值避免覆盖已有映射

部分方法实现示例

1、entrySet()

import java.util.*;
public class HashMap_Study {
    public static void main(String[] args) {
        HashMap student=new HashMap<>();
        student.put(10,"张三");
        student.put(20,"李四");
        student.put(30,"王五");
        student.put(40,"赵六");
        //根据需要的返回值定义一个Set集合
        Set> stu;
        stu=student.entrySet();
        System.out.println(Arrays.toString(stu.toArray()));
    }
}

2、forEach

import java.util.*;
public class HashMap_Study {
    public static void main(String[] args) {
        HashMap student=new HashMap<>();
        student.put(10,"张三");
        student.put(20,"李四");
        student.put(30,"王五");
        student.put(40,"赵六");
        student.forEach((key,value)->{
            System.out.println("Key="+key+" "+"Value="+value);
        });
    }
}

注:foreach不可以直接修改Map里面的键值对

3、putIfAbsent

import java.util.*;
public class HashMap_Study {
    public static void main(String[] args) {
        HashMap student=new HashMap<>();
        student.put(10,"张三");
        student.put(20,"李四");
        student.put(30,"王五");
        student.put(40,"赵六");
        student.putIfAbsent(40,"你好");
        student.putIfAbsent(50,"刘七");
        student.forEach((key,value)->{
            System.out.println("Key="+key+" "+"Value="+value);
        });
    }
}

可以看到,(40,"你好")这一键值对没有成功添加,因为已经存在40这个key了。

三、补充知识

1、Lambda表达式

Lambda表达式是一种简洁的编程语言特性,它允许我们以匿名方法的形式快速定义和实现功能。其使用的符号是->。其实可以把他理解为只写方法的参数和方法体,避免了单独写方法的麻烦。例如上面在foreach方法中用到的

(key,value)->{
            System.out.println("Key="+key+" "+"Value="+value);
        }

就是对传入的key和value进行大括号里面的操作,本质上就是一个简化版的方法

2、Set的重要应用

Set是集合,区别于Collection,Set中不允许有重复的元素出现,利用这一特性,我们可以用Set来执行去重、集合运算等操作。

①去重

例如现在有一个线性表,里面有{1,2,2,3,3,4,5,6}的元素,现在要将所有的重复元素去除到只剩一个,那就可以将这个线性表的元素全部添加到一个Set中,这样就可以实现去重操作了。

import java.util.*;
public class delete {
    public static void main(String[] args) {
        ArrayList number = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 4, 5, 6));
        Set num=new HashSet<>(number);
        System.out.println(num);
    }
}

②集合运算

集合的运算包括求交集和并集:交集是两个集合共有的元素,并集是两个集合含有的所有元素。

import java.util.*;
public class delete {
    public static void main(String[] args) {
        ArrayList number = new ArrayList<>(Arrays.asList(1,2,3,4));
        Set num1=new HashSet<>(number);
        Set num2=new HashSet<>(Arrays.asList(3,4,5,6));
        Set UnionNum=new HashSet<>(num1);
        UnionNum.addAll(num2);
        Set intersectSet=new HashSet<>(num1);
        intersectSet.retainAll(num2);
        System.out.println("并集"+UnionNum);
        System.out.println("交集"+intersectSet);
    }
}

并集:调用addAll方法       交集:调用retainAll方法

posted @ 2026-01-09 13:33  clnchanpin  阅读(3)  评论(0)    收藏  举报