jackgaolei

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.引用变量

public class T {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer("B");
        operrater(a,b);
        System.out.println(a+","+b);
    }
    
    public static void operrater(StringBuffer x,StringBuffer y) {
        x.append(y);
        y=x;
    }
}

结果:AB,B

基本数据类型都是值传递,引用数据类型都是地址传递。

x.append(y)是对a指向地址内容的操作,故a的值会被改变。

y=x只是将y的地址指向x的地址,并未改变a指向地址里的内容。

 

2.时间复杂度的计算+排序

(1)找到执行次数最多的语句 
(2)计算语句执行次数的数量级
(3)用大O来表示结果

import util.StringUtil;

/**
 * 插入排序-直接插入排序
 */
public class T2 {

    /**
     * 插入排序-直接插入排序
     */
    public void sort1(int[] array) {
        int j;
        for (int i = 1; i < array.length; i++) {
            int temp = array[i];
            for (j = i - 1; j >= 0 && array[j] > temp; j--) {
                array[j + 1] = array[j];
            }
            array[j + 1] = temp;
        }
    }

    /**
     * 交换排序-冒泡排序
     */
    public void sort2(int[] a) {
        int temp;
        for (int i = 0; i < a.length - 1; i++) {
            boolean flag = false;
            for (int j = a.length - 1; j > i; j--) {
                if (a[j] < a[j - 1]) {
                    temp = a[j - 1];
                    a[j - 1] = a[j];
                    a[j] = temp;
                    flag = true;
                }
            }
            if (!flag)
                return;
        }
    }

    /**
     * 选择排序-简单选择排序
     */
    public void sort3(int[] a) {
        int temp;
        for (int i = 0; i < a.length - 1; i++) {
            int min = i;
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < a[min]) {
                    min = j;
                }
            }

            if (min != i) {
                temp = a[i];
                a[i] = a[min];
                a[min] = temp;
            }
        }
    }

    public static void main(String[] args) {
        int[] a = { 49, 38, 65, 97, 76, 13, 27 };
        new T2().sort2(a);
        StringUtil.show(a);
    }

}

 

3.hashmap和hashtable的区别

hashmap

线程不安全

允许有null的键和值

效率高一点、

方法不是Synchronize的要提供外同步

有containsvalue和containsKey方法

HashMap 是Java1.2 引进的Map interface 的一个实现

HashMap是Hashtable的轻量级实现

hashtable

线程安全

不允许有null的键和值

效率稍低、

方法是是Synchronize的

有contains方法方法

、Hashtable 继承于Dictionary 类

Hashtable 比HashMap 要旧

  

    是否有序 是否允许元素重复
Collection
List
Set AbstractSet
  HashSet
  TreeSet 是(用二叉排序树)
Map AbstractMap 使用key-value来映射和存储数据,key必须唯一,value可以重复
  HashMap
  TreeMap 是(用二叉排序树)

3.数组遍历效率

posted on 2016-02-24 17:21  jackgaolei  阅读(196)  评论(0编辑  收藏  举报