这篇文章是讨论如何解决ArrayList的java.util.ConcurrentModificationException异常问题。

错误的提示信息一般如下:

1
2
3
4
5
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
...
...
阅读全文

通常,Map是一种数据结构,用来存储键值对的,每个key只能在map中出现1次。这篇文章总结了9个 Map 和其子类很常见的问题。简单起见,例子中我将会使用泛型。因此,我将只考虑常规的map,而不是特定的map。但是你可以假设K和V都可以比较,那意味着K和V都继承了Comparable接口。

1. 把Map转换成List

在Java中,Map提供了3中集合视图:key set,value set,和 key-value set。他们都能使用addAll()转换成为List。下面的代码片段展示了如何从map构建一个ArrayList。

1
2
3
4
5
6
// key list
List keyList = new ArrayList(map.keySet());
// value list
List valueList = new ArrayList(map.valueSet());
// key-value list
List entryList = new ArrayList(map.entrySet());
阅读全文

`Set` vs. `Set<?>`

你可能知道一个无界的通配符数组如Set<?>能容纳任何类型的元素,同样一个原始的Set也可以。那它们之间有什么不同呢?

关于Set<?>的两个事实

这是两个关于Set<?>的事实:

  • 第一条:因为是用了?来代表任何类型,所以Set<?>可以容纳任何类型的元素。
  • 第二条: 因为我们不知道?是什么类型,所以我们不能把任何类型放入Set<?>

所以Set<?>可以容纳任何类型的元素(满足第一条)。但是我们不能放入任何元素(满足第二条)。这两个条件冲突了吗?当然没有。下面用两个例子来说明:

阅读全文

泛型是在JDK5引入的特性。它允许我们定义的类和接口的时候使用类型参数。它被广泛运用在java集合框架中。类型擦出概念是关于泛型是最容易困惑的部分之一。本文将教你如何使用她。

1.一个常见错误

在下面的例子,accept 方法接受了一个Object集合来作为参数,在main方法中调用却是使用String的集合。它能正常调用吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
public static void main(String[] args) throws IOException {
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add("b");
accept(al);
}
public static void accept(ArrayList<Object> al){
for(Object o: al)
System.out.println(o);
}
}
阅读全文

这篇文章总结了常见关于Java构造器的问题。

1.为什么创建子类对象的时候同样需要调用父类的构造函数?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Super {
String s;
public Super(){
System.out.println("Super");
}
}
public class Sub extends Super {
public Sub(){
System.out.println("Sub");
}
public static void main(String[] args){
Sub s = new Sub();
}
}
阅读全文

一个好的程序员不仅会编程,他们应该深入理解这个程序,然后让这个程序高效的运行。实际上,我们发现很多代码都是使用google搜来的,大家很难知道其为什么是这样的结果,特别是当其出错的时候。

为了了解java设计的原则,计算机科学(CS)的课程会很有用。下面是表示java和操作系统(Operating System)、网络(Networks)、人工智能(Artificial Intelligence)、编译原理(Compiler)、算法(Algorithm)和逻辑(Logic)的图。

 java工程师应该学些的计算机课程

如果您发现其他有用的相关概念,请留下您的宝贵意见。

阅读全文

java hashcode

在Java中有个java.lang.Object的超类,定义了2个非常重要的方法:

1
2
public boolean equals(Object obj)
public int hashCode()

它们是非常被非常重要的,所以有必要理解它们,特别是当用户添加自定义的对象被到Map上的时候。即使是这样,有的高级工程师有时也弄不清应应该如何正确使用。在这篇文章中,我将首先用一个常见的错误例子,来说明equals()和hashCode是如何工作的。

阅读全文

当你要实现计数器的时候,HashMap是非常有用的。

1
2
3
4
5
6
7
8
HashMap<String, Integer> countMap = new HashMap<String, Integer>();
//.... 有多少个a可以这样统计
if(countMap.keySet().contains(a)){
countMap.put(a, countMap.get(a)+1);
}else{
countMap.put(a, 1);
}
阅读全文

Javy Liu

author.bio


author.job


beijing