面试题:
ArrayList与Vector的区别?为什么要用ArrayList取代Vector呢?
vector是线程同步的,可以由两个线程安全的访问一个vector对象,但是一个线程访问Vector的话代码在同步上操作耗费大量时间,而ArrayList不是同步的,所以在不需要保证线程安全时建议使用ArrayList.
ArrayList的扩容机制:
以无参构造方法创建ArrayList时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素时,才真正分配容量。即向数组中添加元素时,数组扩容为10。
*在一开ArrayList的容器大小是NULL,所以当使用add方法添加元素时,就会执行ensureCapacityInternal(size+1)方法。这时会把实现确定的10这个值给容器的minCapacity变量。然后进行判断这个值和现在elementDate的差是否大于0,因为这时的elementDate还没获取到minCapacity里面的10,所以会执行扩容。然后第二次调用add时,这时的minCapacity会被赋值为2.这时elementDate的值已经被赋值为10,所以就不执行扩容。当它执行到11时就调用grow方法进行扩容。
Set集合的概念和特点:
*无序的、不可重复的
*没有带索引的方法,所以不能用for循环遍历
Hash值的概念:是jdk根据对象的地址或字符串或数组的地址算出来的int型的数值
这里就引出一个常见的面试题:
== 和 equals和hashCode(这里的hashCode一定是被重写过)之间的区别?
==:当比较的是基本数据类型时比较的时数据的值,而当比较的是引用数据类型时比较的是对象的地址
equals:因为Object是所有类的父类,Object中的equals方法底层代码是用==比较,所以比较的是对象的地址。
当重写了Object中的equals方法时比较的就是对象中的内容是否相等,String、enum、Date、Integer、D