在做项目的过程中,我们时常回遇到这样一种状况:“判定一个对象是否已经存在与Collection或Map,如果不存在于其中,就将该对象加入到Collection或Map中”。这种需求对于新手经常用下边的代码来完成:
List<Integer> list = new ArrayList<Integer>();
List<Integer> checkList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
list.add(i);
}
for (int k = 5 ; k < 7; k++) {
checkList.add(k);
}
/**
* 判定checkList中的元素是否在list中已经存在
*/
for (Integer checkNum : checkList) {
for (Integer num : list) {
//当list中不存在这个对象是就判定将这个 对象加入到list中
if (checkNum != num) {
list.add(checkNum);
}
}
}
这样做法就会报出一个异常:java.util.ConcurrentModificationException,其实这个原因很简单,就是在便利list的时候,如果这个对象不存在就加入list,那么这个for循环中list的长度其实是变化的。所以我们一般真确的做法是:
List<Integer> list = new ArrayList<Integer>();
List<Integer> checkList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
list.add(i);
}
for (int k = 5 ; k < 7; k++) {
checkList.add(k);
}
/**
* 判定checkList中的元素是否在list中已经存在
*/
for (Integer checkNum : checkList) {
if (!list.contains(checkNum)) {
list.add(checkNum);
}
}
如果是Map的话就更简单了,就直接用containsKey或contaiValue就可以判定key或value是否存在于Map中了,具体做法这里就不在赘述。
分享到:
相关推荐
集合框架(Collection & Map)是Java中用于存储对象的数据结构,包括数组(Array)、List、Set、Map等类型。数组的特点是大小类型固定、性能高效且支持边界值检查,但它只能反映最大容量而不反映实际使用大小。Java....
学习ArrayList与LinkedList类,理解封装数组和链表两种方式定义集合类。 可以使用迭代器Iterator遍历集合的元素。 [*]理解泛型概念,声明和使用带有范型的集合。 第11章 集合 4...
- `hashcode` 方法返回对象的哈希值,通常用于 `HashMap` 或其他基于哈希的集合类。它的主要目的是提高查找效率。 7. **`ArrayList`、`LinkedList`、`Vector` 的区别**: - `ArrayList` 和 `Vector` 都是基于数组...
25. **Generating Partitions**(划分生成):将一个集合划分为若干个子集,常用于组合优化问题。 26. **Generating Graphs**(图的生成):构建和生成图,Java中可以自定义节点和边的数据结构。 27. **...
Java集合框架提供了对一组对象进行操作的接口和类,包括List、Set和Map等。ArrayList基于数组实现,Vector是线程安全的Vector,LinkedList基于链表实现。HashSet基于HashMap实现,TreeSet基于红黑树实现,而...
- 集合框架:List、Set、Map接口及其实现类,泛型,集合的遍历和操作。 - Lambda表达式、Stream API和函数式编程。 - 注解(Annotation)的使用及自定义注解。 全面掌握这些Java核心知识将极大地提高你在面试中...
- 虚引用也称为幽灵引用或者幻影引用,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获取一个对象实例。 2. **垃圾回收机制:** - 垃圾回收是自动进行的,用于释放不再使用的...
- **Java集合框架(Collection Framework)**:Java集合框架是提供一系列接口和类用于存储和操作对象的集合。它主要包括两个根接口:Collection和Map。其中Collection接口是集合框架的父接口,而Map接口则用于存储...
- **Java集合框架**:这是Java编程中非常重要的一个部分,主要用于处理数据集合。 - **ArrayList**:一种动态数组实现的数据结构,适用于频繁查询场景。 - **LinkedList**:双链表实现的数据结构,适合频繁插入...
- `switch` 语句支持任意实现了 `isCase()` 方法的对象作为判定表达式,并且 case 支持范围和集合。 - **循环语句**: - 推荐使用集合的方法 `.each{}` 来遍历集合,而不是传统的 `for` 循环。 - 示例:`[1:2, 3:...
- **解释**:Java 语言的一个重要特点是平台无关性,这得益于 Java 虚拟机的存在。Java 程序编译成字节码后,可以在任何支持 JVM 的平台上运行,无需重新编译。 ### Map 集合特点 8. **Map 集合的键值对概念**。 ...
但是我们可以在一个完全不同的类里定义一些拦截器,然后在任何控制器里使用@With注释来链接他们。 - 42 - Session和Flash作用域 - 42 - 04.模板引擎 - 43 - 模板语法 - 43 - Expressions: ${…} - 44 - Template ...
2. **集合操作**:Kotlin提供了丰富的集合操作,如filter、map、fold等,这些在处理玩家手牌或判定游戏状态时非常有用。 3. **枚举类型**:Kotlin的枚举类型(`enum class`)可以用来表示游戏中的不同操作,例如出...
大素数判定是指判断一个较大数是否为素数的过程。素因子分解则是将一个合数分解为其素因数的乘积形式。常用的素数判定方法包括米勒-拉宾素性测试、费马素性测试等。素因子分解通常采用试除法,即从最小的质数开始,...