Java判断字符串是否在List中的方案详解(忽略大小写)

 更新时间:2025年05月16日 14:53:58   作者:五道书童  
对于需要频繁调用且数据量大的情况,有几种优化方案可以选择,下面给大家分享三种方案给大家详细介绍java字符串判断是否在list中,感兴趣的朋友一起看看吧

Java中高效判断字符串是否在List中(忽略大小写)

对于需要频繁调用且数据量大的情况,有几种优化方案可以选择:

方案1:使用HashSet存储小写版本(推荐)

import java.util.*;
public class CaseInsensitiveLookup {
    private final Set<String> lowerCaseSet;
    public CaseInsensitiveLookup(List<String> originalList) {
        // 预处理:将所有字符串转为小写并存入HashSet
        this.lowerCaseSet = new HashSet<>(originalList.size());
        for (String s : originalList) {
            lowerCaseSet.add(s.toLowerCase());
        }
    }
    public boolean containsIgnoreCase(String target) {
        return lowerCaseSet.contains(target.toLowerCase());
    }
}

优点

  • 预处理时间复杂度O(n),之后每次查询时间复杂度O(1)
  • HashSet的查找效率极高
  • 内存占用相对合理

缺点

  • 初始构建需要遍历整个列表
  • 如果原始列表频繁变化,需要重新构建Set

方案2:使用TreeSet自定义比较器

import java.util.*;
public class CaseInsensitiveLookup {
    private final Set<String> treeSet;
    public CaseInsensitiveLookup(List<String> originalList) {
        this.treeSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
        treeSet.addAll(originalList);
    }
    public boolean containsIgnoreCase(String target) {
        return treeSet.contains(target);
    }
}

优点

  • 查询时间复杂度O(log n)
  • 保持元素有序

缺点

  • 比HashSet稍慢
  • 同样需要预处理

方案3:并行流处理(适用于超大列表且不频繁调用)

import java.util.*;
public class CaseInsensitiveLookup {
    private final List<String> originalList;
    public CaseInsensitiveLookup(List<String> originalList) {
        this.originalList = originalList;
    }
    public boolean containsIgnoreCase(String target) {
        return originalList.parallelStream()
            .anyMatch(s -> s.equalsIgnoreCase(target));
    }
}

优点

  • 不需要预处理
  • 可以利用多核CPU

缺点

  • 每次查询都需要遍历(虽然并行)
  • 不适合频繁调用场景

最佳实践建议

  • 如果列表不常变化:使用方案1(HashSet),这是查询效率最高的方法
  • 如果需要保持插入顺序:考虑LinkedHashSet
  • 如果列表经常变化:考虑方案3或使用ConcurrentHashMap实现类似方案1的功能
  • 如果内存非常紧张:可以考虑方案3,但性能会下降

使用示例

List<String> largeList = Arrays.asList("Apple", "Banana", "Orange", ...);
CaseInsensitiveLookup lookup = new CaseInsensitiveLookup(largeList);
// 频繁调用
boolean contains = lookup.containsIgnoreCase("apple");  // 返回true

选择哪种方案取决于你的具体场景:数据量大小、查询频率、列表变更频率和内存限制等因素。

到此这篇关于Java中高效判断字符串是否在List中(忽略大小写)的文章就介绍到这了,更多相关java字符串判断是否在list中内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker和 Containerd 的区别解析

    Docker和 Containerd 的区别解析

    containerd 是一个来自 Docker 的高级容器运行时,并实现了 CRI 规范,它是从 Docker 项目中分离出来,之后 containerd 被捐赠给云原生计算基金会(CNCF)为容器社区提供创建新容器解决方案的基础,这篇文章主要介绍了Docker和 Containerd 的区别,需要的朋友可以参考下
    2024-03-03
  • MyBatis映射文件中parameterType与resultType的用法详解

    MyBatis映射文件中parameterType与resultType的用法详解

    MyBatis中的ParameterType指的是SQL语句中的参数类型,即传入SQL语句中的参数的类型,下面这篇文章主要给大家介绍了关于MyBatis映射文件中parameterType与resultType用法的相关资料,需要的朋友可以参考下
    2023-04-04
  • Java多线程中的wait、notify和park、unpark的使用详解

    Java多线程中的wait、notify和park、unpark的使用详解

    这篇文章主要介绍了Java多线程中的wait、notify和park、unpark的使用详解,它们都是线程之间进行协作的手段,都属于 Object 对象的方法,必须获得此对象的锁,才能调用这几个方法,需要的朋友可以参考下
    2023-12-12
  • MyBatis3传递多个参数(Multiple Parameters)

    MyBatis3传递多个参数(Multiple Parameters)

    这篇文章主要介绍了MyBatis3传递多个参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java中Springboot集成Kafka实现消息发送和接收功能

    Java中Springboot集成Kafka实现消息发送和接收功能

    Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Kafka可以实现消息队列、数据存储和流处理等功能,在Java中,可以使用Spring Boot集成Kafka实现消息的发送和接收,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • Java线程池的几种实现方法和区别介绍

    Java线程池的几种实现方法和区别介绍

    下面小编就为大家带来一篇Java线程池的几种实现方法和区别。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-05-05
  • java stream中Collectors的用法实例精讲

    java stream中Collectors的用法实例精讲

    这篇文章主要为大家介绍了java stream中Collectors的用法实例精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Spring中Cache的使用方法详解

    Spring中Cache的使用方法详解

    这篇文章主要介绍了Spring中Cache的使用方法详解,Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,需要的朋友可以参考下
    2024-01-01
  • nacos在mac上部署提示找不到或无法加载主类的解决

    nacos在mac上部署提示找不到或无法加载主类的解决

    这篇文章主要介绍了nacos在mac上部署提示找不到或无法加载主类的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Spring中的路径匹配器AntPathMatcher详解

    Spring中的路径匹配器AntPathMatcher详解

    这篇文章主要介绍了Spring中的路径匹配器AntPathMatcher详解,Spring的PathMatcher路径匹配器接口,用于支持带通配符的资源路径匹配,本文提供了部分实现代码,需要的朋友可以参考下
    2023-09-09

最新评论