• java中数组的大小是固定的,如果想使用自动分配内存的ArrayList,会使得效率降低。效率是考虑使用数组的唯一原因,否则使用容器会好很多。

  • 数组是一个对象,数组的标识符是一个引用。对象数组和基本类型数组的区别是对象数组保存的是引用,而基本类型数组保存的是值。

  • java容器的继承关系如下图:

java容器

  • java容器的遍历:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ArrayList<Integer> test = new ArrayList<Integer>();
test.add(1);
test.add(2);
for (int i = 0; i < test.size(); i++) {
System.out.println(test.get(i));
}
System.out.println("Iterators: ");
Iterator<Integer> it = test.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
HashSet<Integer> testSet = new HashSet<Integer>();
testSet.add(1);
testSet.add(2);
testSet.remove(1);
Iterator<Integer> itSet = testSet.iterator();
while (itSet.hasNext()) {
System.out.println(itSet.next());
}
HashMap<String, Integer> testMap = new HashMap<String, Integer>();
testMap.put("test", 1);
Set<Map.Entry<String, Integer>> entrys = testMap.entrySet();
Iterator<Map.Entry<String, Integer>> itMap = entrys.iterator();
while (itMap.hasNext()) {
Map.Entry<String, Integer> entry = itMap.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
  • ArrayList的实现是基于数组的,而LinkedList的实现是基于链表结构的。所以ArrayList的随机访问效率会高于LinkedList,但是如果在中间插入的效率会低。

  • HashTable是同步的,而HashMap是非同步的。两者遍历的方式也不同。HashMap的键值可以为空,但是HashTable的键值不可以为空。一般会考虑使用HashMap,如果需要考虑同步问题,可以使用ConcurrentHashMap.