虽然面试的要求是要知道HashMap是怎么实现的,令人望而却步,但搞明白它怎么用,就成功了一小半。
注意这些接口及其实现类的继承关系:
Set 接口和 List 接口都是 Collection 的子接口,因此我们先看看Collection 接口中有什么方法:
方法名 | 作用 |
---|---|
boolean add(Object o) | 向集合中加入一个对象 |
void clear() | 删除集合中的所有对象 |
boolean isEmpty() | 判断集合是否为空 |
remove(Object o) | 从集合中删除一个对象的引用 |
int size() | 返回集合中元素的数目 |
Set有一个实现类,就是HashSet,它是Set中我们最常用的。下面我们举一个例子,在HashSet中使用这些方法。
//导包时少用*,写明确一点,方便查错和阅读import java.util.Set;
import java.util.HashSet;public class Test { public static void main(String args []) { //把具体的实现类向上转型为接口类型,方便接收参数,即:
//HashSet<String> hashSet = new HashSet<String>();
//Set<String> set = hashSet;
Set<String> set = new HashSet<String>(); set.add("a"); set.add("b"); set.add("c"); set.add("d");
System.out.println("Size: " + set.size()); //重复添加元素,会怎样呢?
set.add("c");
System.out.println("Size with two c: " + set.size()); set.remove("a");
System.out.println("Size after remove: " + set.size());
set.clear();
System.out.println("Size after clear: " + set.size());
System.out.println("Is empty: " + set.isEmpty());
}
}
运行结果:
如何遍历 Set 集合是无序的,所以不能像数组或者List那样,根据下标输出其中的元素,因此我们需要使用迭代器 Iterator。 由最前面的图可以看出,它们之间的继承关系是:Iterator <-- Collection <-- Set <-- HashSet.
Iterator 的常用方法有:
遍历Set的方法: 生成迭代器对象:Iterator it = set.iterator() ,这个迭代器对象可以把set中的元素都取出来。 iterator() 方法属于 collection 接口,所以 collection 的子接口 set 中, 必然有 iterator() 方法。
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;public class Test { public static void main(String args []) {
Set<String> set = new HashSet<String>();
set.add("a"); set.add("b"); set.add("c"); set.add("d");
Iterator<String> it = set.iterator(); while(it.hasNext())
System.out.println(it.next());
}
}
运行结果:
由一开始的类图可以看出,Map并没有继承Collection接口,是一个单独的接口。 Map中的重要方法:
一个简单的例子:
import java.util.Map;import java.util.HashMap;
public class Test {
public static void main(String args []) { Map<String, String> map = new HashMap<String, String>(); map.put("1", "a"); map.put("2", "b"); map.put("3", "c"); map.put("4", "d"); //如果有重复的键,后面的值会覆盖前面的
map.put("3", "e"); System.out.println(map.size()); System.out.println(map.get("3"));
}
}
运行结果: