!8、作用域public,protected,private,以及不写时的区别?
不写时默认是default,这里主要说明这几个作用域的使用范围。
作用域
当前类 同一package 子孙类
其他package
public
√
√
√
√
protected
√
√
√
×
friendly
√
√
×
×
private
√
×
×
×
这里需要说明的是在同一个package, public、protected、friendly使用范围一致。
而在其他package中,只有子孙类中protected才能被访问。
二:collections相关的数据结构及API
?p=106
!1、列举几个Java Collection类库中的常用类
此处应该有Collection类图。
Collection是java.util 中的一个接口。继承自Iterable。
子接口:List、Set、Queue...
实现类:ArrayList、LinkedList、HashSet、TreeSet、Vector、Stack
其他相关类:Iterator、TreeMap、HashTable、HashMap
Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的"子接口"
如List和Set。Collection所代表的是一种规则,它所包含的元素都必须遵循一条或者多条规则。
如有些允许重复而有些则不能重复、有些必须要按照顺序插入而有些则是散列,有些支持排序但是有些则不支持。
!2、List、Set、Map是否都继承自Collection接口?
List、Set继承自Collection接口,而Map不是。
(1)List 所代表的是有序的Collection。实现List接口的集合主要有:ArratList、LinkedList、Vector、Stack。
(2) Set是一种不包括重复元素的Collection。实现了Set接口的集合有:EnumSet、HashSet、TreeSet。
(3)Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。
实现map的有:HashMap、TreeMap、HashTable、Properties、EnumMap。
!3、HashMap和Hashtable的区别
需查看源码。
1、历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 。
2、同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 。
3、值:只有HashMap可以让你将空值作为一个表的条目的key或value 。
1.HashTable的方法是同步的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程场合要手动同步
2.HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration进行遍历,HashMap使用Iterator进行遍历。
5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
1 int hash = hash(k); 2 int i = indexFor(hash, table.length); 3 static int hash(Object x) { 4 h ^= (h >>> 20) ^ (h >>> 12); 5 return h ^ (h >>> 7) ^ (h >>> 4); 6 }