1.public ,private, protected 不写时候的区别:

作用于 当前类 同包 子孙类 其他package
public
protected ×
friendly × ×
private × × ×

不写时默认为friendly

2.Collection和Collections的区别

答:
1.java.util.Collection是一个集合接口。它提供了集合对象进行基本操作的通用接口方法。
Collection接口在java类库中有很多具体的实现。Collection接口意义是为各种具体的集合提供了最大化的统一操作方式。

1
2
3
4
5
6
7
Collection   
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set

java.util.Collections是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一各工具类,服务于java的Collection框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestCollections {
public static void main(String args[]) {
//注意List是实现Collection接口的
List list = new ArrayList();
double array[] = { 112, 111, 23, 456, 231 };
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections.sort(list);
for (int i = 0; i < array.length; i++) {
System.out.println(list.get(i));
}
// 结果:23.0 111.0 112.0 231.0 456.0
}
}

3.Vector类和ArrayList类的区别

答:
VectorArrayList同属于List接口下,Vector从java1开始一直沿用至今,他俩的最大区别之处是加入了同步锁的策略,Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

4.String和StringBuffer的区别

答:
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
我们查看内部源码

1
2
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {...}

查看源码的关键字’final’内部则是维护一个不可改变的数组,所以不可以动态的扩种添加,只能创建一个更大的对象来装载新添加的数据

下面我们来看一下’StringBuffer’的官方源代码

1
2
3
4
5
6
7
8
9
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, Appendable, CharSequence
{
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
}

从这里看出我们实际上增加字符串的过程实际上就是调用了自身的append方法而已,追查具体的实现

1
2
3
4
5
6
7
8
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
str.getCharsNoCheck(0, len, value, count);
count += len;
return this;
}

实际上是计算当前字符串的长度,并且通过计数器把最新存储的位置保存下来,之前还需要判空,ensureCapacityInternal(count + len);就是他们的动态扩展数组大小的具体实现,其原理就是判断当前存储的的位数是否足够,不够就动态的空中。