java集合 - 容器
作用: 用于装对象。调用它的方法装对象、取对象、删除对象、遍历对象……
方法的用法 - 用对象.方法名(参数值)
Map
Map里存的东西是:key-value对。
假如要存放用户的成绩,要用如下数据结构:
语文:89
数学:87
英语:56
假如要存放一个的身体状况:
身高:183
体重:69
血压:55/133
Map不允许key重复!
....
在这种数据中,每项数据都是 key-value 对 组成。
假如我们把value,当成是key的“附属物”,
Map存储key-value对时,只要考虑key的存储即可,key存储之后,value跟着key即可。
再进一步:如果只管Map里的key,并把所有的key收集起来 —— 就变成了Set。
Map与Set是一一对应。
HashSet底层是靠HashMap实现,HashMap用“hash”算法控制“一个萝卜一个坑”。
TreeSet底层是靠TreeMap实现,TreeMap就是真正的红黑树。
对于Map而言,由于value只是附属物,因此Map对value几乎没有要求。
Map对key有要求。
====HashMap====
- 它会根据key的hashCode()方法的返回值来计算key的存、取位置。
HashMap怎样才算两个key重复?
A。 通过equals比较返回true.
B。 两个key的hashCode()返回值相等。
Hashtable与HashMap的区别:
1. Hashtable是从JDK1.0就有的,尽量少用。
2. Hashtable不允许使用null作为key、value。但HashMap允许!
3. Hashtable是线程安全的(实现不好),
HashMap是线程不安全的。HashMap性能好。
除此之外,Hashtable与HashMap的几乎是相同。
====TreeMap====
- 底层的红黑树只对key进行排序。
TreeMap要求key必须是可比较大小。
A。 自然排序。要求所有key实现Comparable接口。
B。 定制排序。要求创建TreeMap时提供一个Comparator接口。
TreeMap怎样才算两个key重复?
A。 通过compareTo()比较大小时返回0,这就表明两个元素相等。
异常处理
异常机制,用于保障我们的程序更加健壮性(鲁棒性)。
以一个例子来说明,程序员开发的程序,无论用户怎么操作,它都可以正常应对。
对于一个五子棋来说,下面是比较“完善”的处理机制
if(用户输入包含非数字、逗号之外的其他字符)
{
// 进行错误处理
}
else if(用户输入逗号)
{
// 在进行错误处理
}
else if(用户输入座标超出了范围)
{
// 又要进行处理
}
……
{
// 最后才进行业务处理。
}
这种机制有如下两个问题:
A。 永远不可能“穷举”所有错误,并进行处理。
B。 代码“臃肿”得难以忍受。
牛人就想,能不能把上面代码简化为:
if(一切正常)
{
//进行业务处理。
}
else if(出现任何各种错误)
{
// 进行错误处理
} 还是喜欢着个判断,哈哈
这就是Java 的异常处理。
try // 尝试让它执行业务处理,如果可以执行完成,就代表了一切正常。
{
// 正常业务处理
}
catch(异常1 e1)
{
// 进行异常1处理
}
catch(异常2 e2)
{
// 进行异常1处理
}
不同的catch块负责对不同的异常进行处理。
■ 对于一个异常,最多只有一个catch块能捕捉到该异常。
■ 多个catch块捕捉异常,应该是先捕捉小的异常,再捕捉大的异常。
先捕捉子类异常,再捕捉父类异常。
JDK 7提供了新功能:多异常捕捉。
catch (类1 | 类2 | 类3 ... ex)
访问异常对象:
当catch块捕捉到异常时,异常对象会作为catch块的参数被传入。
因此在catch块可通过该参数来访问实际的异常对象。
- getMessage 返回异常的描述信息。
- 输出异常的跟踪栈(堆栈)信息。
作用: 用于装对象。调用它的方法装对象、取对象、删除对象、遍历对象……
方法的用法 - 用对象.方法名(参数值)
Map
Map里存的东西是:key-value对。
假如要存放用户的成绩,要用如下数据结构:
语文:89
数学:87
英语:56
假如要存放一个的身体状况:
身高:183
体重:69
血压:55/133
Map不允许key重复!
....
在这种数据中,每项数据都是 key-value 对 组成。
假如我们把value,当成是key的“附属物”,
Map存储key-value对时,只要考虑key的存储即可,key存储之后,value跟着key即可。
再进一步:如果只管Map里的key,并把所有的key收集起来 —— 就变成了Set。
Map与Set是一一对应。
HashSet底层是靠HashMap实现,HashMap用“hash”算法控制“一个萝卜一个坑”。
TreeSet底层是靠TreeMap实现,TreeMap就是真正的红黑树。
对于Map而言,由于value只是附属物,因此Map对value几乎没有要求。
Map对key有要求。
====HashMap====
- 它会根据key的hashCode()方法的返回值来计算key的存、取位置。
HashMap怎样才算两个key重复?
A。 通过equals比较返回true.
B。 两个key的hashCode()返回值相等。
Hashtable与HashMap的区别:
1. Hashtable是从JDK1.0就有的,尽量少用。
2. Hashtable不允许使用null作为key、value。但HashMap允许!
3. Hashtable是线程安全的(实现不好),
HashMap是线程不安全的。HashMap性能好。
除此之外,Hashtable与HashMap的几乎是相同。
====TreeMap====
- 底层的红黑树只对key进行排序。
TreeMap要求key必须是可比较大小。
A。 自然排序。要求所有key实现Comparable接口。
B。 定制排序。要求创建TreeMap时提供一个Comparator接口。
TreeMap怎样才算两个key重复?
A。 通过compareTo()比较大小时返回0,这就表明两个元素相等。
异常处理
异常机制,用于保障我们的程序更加健壮性(鲁棒性)。
以一个例子来说明,程序员开发的程序,无论用户怎么操作,它都可以正常应对。
对于一个五子棋来说,下面是比较“完善”的处理机制
if(用户输入包含非数字、逗号之外的其他字符)
{
// 进行错误处理
}
else if(用户输入逗号)
{
// 在进行错误处理
}
else if(用户输入座标超出了范围)
{
// 又要进行处理
}
……
{
// 最后才进行业务处理。
}
这种机制有如下两个问题:
A。 永远不可能“穷举”所有错误,并进行处理。
B。 代码“臃肿”得难以忍受。
牛人就想,能不能把上面代码简化为:
if(一切正常)
{
//进行业务处理。
}
else if(出现任何各种错误)
{
// 进行错误处理
} 还是喜欢着个判断,哈哈
这就是Java 的异常处理。
try // 尝试让它执行业务处理,如果可以执行完成,就代表了一切正常。
{
// 正常业务处理
}
catch(异常1 e1)
{
// 进行异常1处理
}
catch(异常2 e2)
{
// 进行异常1处理
}
不同的catch块负责对不同的异常进行处理。
■ 对于一个异常,最多只有一个catch块能捕捉到该异常。
■ 多个catch块捕捉异常,应该是先捕捉小的异常,再捕捉大的异常。
先捕捉子类异常,再捕捉父类异常。
JDK 7提供了新功能:多异常捕捉。
catch (类1 | 类2 | 类3 ... ex)
访问异常对象:
当catch块捕捉到异常时,异常对象会作为catch块的参数被传入。
因此在catch块可通过该参数来访问实际的异常对象。
- getMessage 返回异常的描述信息。
- 输出异常的跟踪栈(堆栈)信息。