考察点:数据类型
1.int和Integer有什么区别?
Integer是int的包装类
Java为了编程方便所以引入了基本数据类型,但是为了能将这些基本数据类型当成对象操作为每个基本数据类型引入了对应的包装类。自动拆装箱机制使得二者可以互相装换。
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化
- 原始类型: boolean,char,byte,short,int,long,float,double
-
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
2.String是最基本的数据类型吗?
基本数据类型只包括byte、int、char、long、float、double、boolean和short。
而String类是由Java.lang包下提供的final类型的类。String类不可被继承也不可修改,若想对构造动态字符数据可以选择使用StringBuffer类。
3.String、StringBuilder、StringBuffer的区别
String | StringBuffer | StringBuilder |
不可变 | 可变 | 可变 |
线程安全 | 线程不安全 | |
多线程操作 | 单线程操作 | |
4.数组(Array)和列表(ArrayList)的区别?
不同点:
-
Array可以包含基本类型和对象类型,而ArrayList只能包含对象类型
-
Array大小是固定的,ArrayList的大小是动态变化的。
-
相对Array而言,ArrayList提供了更多的方法和特性,例如addAll(),removeAll(),iterator()。
当处理固定大小的基本数据类型的时候可以选择使用数组能提高效率
5.为什么重写equals还要重写hashcode?
是为了提高效率,若hashCode()都不相同就不需要在进行equals比较了。重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上。重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。
当输入的样本量足够大时,是会产生哈希冲突的,也就是说不同的输入产生了相同的输出。
-
1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;
-
2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)
-
原因:从散列的角度考虑,不同的对象计算哈希码的时候,可能引起冲突
6.Map的分类和常见的情况
接口java.util.Map的四个实现类:HashMap Hashtable LinkedHashMap TreeMap
java容器包括Collection(set,list)和Map两种,Collection储存着对象的集合,而Map储存着键值对(两个对象)的映射表。
Hashmap:是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。允许记录的键或者值为空;HashMap线程不安全,如果需要线程同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
Hashtable :它不允许记录的键或者值为空;线程安全,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
LinkedHashMap: 是HashMap的一个子类,保存了记录的插入顺序,可用Iterator遍历
TreeMap:实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。