You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用ArrayList的contains方法结合equalsIgnoreCase实现忽略大小写元素检查的问题

解决ArrayList.contains()区分大小写的问题

嘿,我明白你遇到的困扰了——你想忽略大小写检查新增的产品编码是否已存在,但ArrayList.contains()默认是严格区分大小写的,而且你代码里的code.equalsIgnoreCase(code)这行其实完全没用(毕竟自己和自己比肯定返回true,还没把结果存下来)。咱们来把这个问题搞定:

问题根源

ArrayList.contains()方法底层是调用元素的equals()方法来判断匹配的,而String.equals()是区分大小写的,所以直接用productcode.contains(code)只会找到完全大小写一致的编码,达不到你想要的忽略大小写的效果。

解决方案1:手动遍历列表检查(兼容所有Java版本)

咱们可以自己遍历productcode列表,逐个用equalsIgnoreCase()来比较,这样就能忽略大小写了:

static void AddProductCode() { 
    boolean print = true; 
    for (int i = 0; i < product.size(); i++) { 
        System.out.println(productcode.get(i)+" " +product.get(i)+" "+ productprice.get(i)); 
    } 
    System.out.print("PRODUCT CODE : "); 
    code = scan.next(); 
    
    // 手动检查是否存在忽略大小写的匹配
    boolean check = false;
    for (String existingCode : productcode) {
        if (existingCode.equalsIgnoreCase(code)) {
            check = true;
            break; // 找到匹配就提前退出循环
        }
    }
    
    if(check){ 
        System.out.println("CODE IS UNAVAILABLE"); 
        AddProductCode(); 
    } else { 
        AddProduct2nd(); 
    } 
}

解决方案2:用Java Stream简化代码(Java 8及以上)

如果你的项目用的是Java 8或更高版本,可以用Stream的anyMatch()方法来简化遍历逻辑,代码更简洁:

// 把上面的手动遍历替换成这一行
boolean check = productcode.stream()
    .anyMatch(existingCode -> existingCode.equalsIgnoreCase(code));

额外优化建议(高频查询场景)

如果这个编码检查操作很频繁,或者productcode列表会变得很大,遍历列表的效率会比较低。这时候可以改用不区分大小写的Set来存储编码,比如TreeSet:

// 初始化的时候用这个Set代替ArrayList
Set<String> productCodeSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);

之后检查编码是否存在直接调用productCodeSet.contains(code)就可以了,它会自动忽略大小写,而且查询效率是O(log n),比遍历ArrayList的O(n)快很多。

最后别忘了删掉你代码里那行无用的code.equalsIgnoreCase(code);,它完全起不到任何作用~

内容的提问来源于stack exchange,提问作者Kurt Bernstein Blancia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:49:05