- HashSet|HashMap比较:底层数据结构为哈希表;
HashMap存储键值对,键唯一,而HashSet仅仅存储对象,对象唯一;
HashMap使用唯一的键来获取对象,速度相对较快。
- HashSet集合方法:
add(Objiect o) 添加对象
size() 返回元素个数
contains(Objiect o) 判断是否存在
remove(Objiect o) 移除有关对象
- HashMap集合方法:
put(key,value)添加键值对
get(key) 获取与key有关的值
remove(key) 移除与key有关的映射,并返回旧值
containsKey( ) containsValue( )判断是否存在key value
size()返回元素个数
keySet()获取所有key的集合
values()获取所有values的集合
泛型集合
- 泛型即参数化类型,通过指定集合中的元素类型来实现约束
作用:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性
举例:List list=new ArrayList( );
ArrayList students = new ArrayList();
- 典型的泛型集合:ArrayList<E>、HashMap<K,V>
泛型类: public class User{}
泛型接口:public interface Pair{}
泛型方法: public void getMiddle(T[] b) {} 注意的位置
在泛型中,基本类型是不可以做泛型参数,只能使用包装类、引用数据类型。
对异常处理不当
说明:所谓异常,就是在程序执行中发生的异常状态。作为一种语言的机制,Java提供了异常处理,程序员可以比较容易地对异常进行表述。
但是,就算是Java提供了这种优异的机制,如果不能正确地运用就没有任何意义。经常发生的错误有如下几种情况。
• 异常交给上一层类了,但是异常的详细内容却被隐藏了。IOException,SQLException等异常只被上一层的Error,Throwable,Exception接收,但是错误的详细内容却被隐藏了。
• Catch中是空的(未作任何处理)。
为了不要发生这样的对异常的不当处理,需要使catch到的异常都能交给与该异常相应的类去处理。超类是不能处理catch块中的异常种类的。另外,不允许用空的catch块来处理异常。必须编写适当的异常处理,以便了解异常是如何发生的。
例:读入文件时的异常处理
try {
reader = new BufferedReader( new FileReader(file));
reader.read();
} catch (Throwable t) { // ERROR: 错误的详细信息被隐藏了
// 讲述错误处理
} finally{
try{
reader.close();
} catch(IOException ioe) { //ERROR: catch块中什么也没写
}
}
修正:
try {
reader = new BufferedReader( new FileReader(file));
reader.read();
} catch (FileNotFoundExceptionfnfe) { // OK: catch了想定的异常
// 记述错误处理
} catch (IOException ioe1) { // OK: catch了想定的异常
// 记述错误处理
} finally{
try{
reader.close();
} catch(IOException ioe) {
// 记述错误处理 // OK:写了异常处理
}
}