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.数组遍历效率