hashset适合存标签字符串,因其基于hashmap实现,插入和查询平均o(1),且string已重写hashcode()和equals(),天然支持去重;添加重复元素会静默失败,建议统一trim()和tolowercase()处理大小写与空格。

直接用 HashSet 存标签字符串,它天然去重、查找快,几行代码就能搞定。
为什么选 HashSet?
HashSet 基于 HashMap 实现,插入和查询平均时间复杂度是 O(1),且自动忽略重复元素。标签通常是字符串,而 String 已正确重写了 hashCode() 和 equals(),所以无需额外处理就能精准去重。
基础用法:添加并自动去重
创建一个 HashSet<string></string>,调用 add() 方法添加标签。重复的会静默失败(返回 false),不改变集合内容:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Set<string> tags = new HashSet();
tags.add("Java"); // true
tags.add("Spring"); // true
tags.add("Java"); // false(已存在,不重复添加)
System.out.println(tags); // [Spring, Java](顺序不定)
</string>
注意大小写和空格等细节
默认情况下,"java" 和 "Java" 被视为不同标签。如需忽略大小写,可统一转小写再存:
- 添加前调用
tag.toLowerCase() - 或使用
TreeSet配合String.CASE_INSENSITIVE_ORDER(但失去 O(1) 性能) - 前后空格也影响判断,建议加
trim():tags.add(tag.trim().toLowerCase())
批量去重 + 转回列表(按需)
如果原始数据是一组可能含重复的标签字符串(比如从表单、日志或 CSV 中读取),可以这样一步到位:
List<string> rawTags = Arrays.asList("Java", "python", "JAVA", " Python ", "java");
Set<string> uniqueTags = new HashSet();
for (String tag : rawTags) {
if (tag != null && !tag.trim().isEmpty()) {
uniqueTags.add(tag.trim().toLowerCase());
}
}
// 转成 List(如需有序展示,可用 ArrayList 构造)
List<string> result = new ArrayList(uniqueTags);
</string></string></string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










