Java|Java基础整理(全是干货)( 四 )


String pool 指字符串常量池 , 保存着所有在编译时就已经确定的String变量 。 调用String.intern()方法 , 可以将此String变量加入常量池中 。
String pool在堆中 。
String a= new String(\"a\");
String a1= new String(\"a\");
sout(a==a1);//false
String b=\"b\";
String b1=\"b\";
sout(b==b1);//true
String c= new String(\"c\");
String c1= \"c\";
sout(c==c1);//false
sout(c.equals(c1));//true
详情见 八. ==与equals的区别
十五.ArrayList和Vector的区别
这两个类都实现了List接口(List接口继承了Collection接口) , 他们都是有序集合 , 即存储在这两个集合中的元素的位置都是有顺序的 , 相当于一种动态的数组 , 我们以后可以按位置索引号取出某个元素 , 并且其中的数据是允许重复的 。
(1)同步性:
Vector是线程安全的 , 也就是说是它的方法之间是线程同步的 , 而ArrayList是线程序不安全的 , 它的方法之间是线程不同步的 。 如果只有一个线程会访问到集合 , 那最好是使用ArrayList , 因为它不考虑线程安全 , 效率会高些;如果有多个线程会访问到集合 , 那最 好是使用Vector , 因为不需要我们自己再去考虑和编写线程安全的代码 。
备注:对于Vector&ArrayList、Hashtable&HashMap , 要记住线程安全的问题 , 记住Vector与Hashtable是旧的 , 是java一诞生就提供了的 , 它们是线程安全的 , ArrayList与HashMap是java2时才提供的 , 它们是线程不安全的 。 所以 , 我们讲课时先讲老的 。
(2)数据增长:
ArrayList与Vector都有一个初始的容量大小 , 当存储进它们里面的元素的个数超过了容量时 , 就需要增加ArrayList与Vector的存储空间 , 每次要增加存储空间时 , 不是只增加一个存储单元 , 而是增加多个存储单元 , 每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡 。 Vector默认增长为原来两倍 , 而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍) 。 ArrayList与Vector都可以设置初始的空间大小 , Vector还可以设置增长的空间大小 , 而ArrayList没有提供设置增长空间的方法 。
总结:即Vector增长原来的一倍 , ArrayList增加原来的0.5倍 。
十六.Java 中Collections类里的reverse (反转方法)
public static void reverse(List<?> list) {
int size = list.size();
if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
for (int i=0 mid=size>>1 j=size-1; i<mid; i++ j--)
swap(list i j);
else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0 mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);



此方法可反转数组的值.