Archive for the ‘J2EE’ Category

List中的remove使用注意

先来看API是怎样写的。 boolean remove(Object o) 从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。如果列表不包含元素,则不更改列表。更确切地讲,移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i 的元素(如果存在这样的元素)。如果此列表已包含指定元素(或者此列表由于调用而发生更改),则返回 true。 可以看到是用o.equals来判断是否删除的,在一般情况下使用都没有问题。但我有一次犯了一个错误。 有一个List<子类> list,我用 list.remve(父类对象);这样很明显是不行的,equals不了,所以就删除不了。 解决方法:1,是remove同一类对象 2,在父类覆盖equals方法,用instanceof来判断是不是子类,然后判断相等。 方法2较为麻烦。还是建议方法1。


选择排序算法(JAVA版)

选择排序和插入排序差不多,交换的次数减少。平均/最好/最坏时间复杂度是O(n2),是不稳定的排序算法。(插入排序是稳定排序算法) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /* * 选择排序:选择最小/大的放在前面,每一趟前几个按序排列 */ int[] selectSort(int[] arr) { for (int i = 0; i < arr.length – 1; i++) { int k = i; //和i后面的每一个比较,如果有比i小的记下下标k for (int j = i + 1; j < arr.length; [...]


快速排序算法(JAVA版)

快速排序是不稳定的排序方法,平均时间复杂度为O(nlogn),空间复杂度为O(logn),最差时是有序或基本有序时,算法退化为冒泡排序,时间复杂度是O(n2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 /* * 快速排序:选一个值pivokey(一般是第一个),小于pivokey放在左边,大于pivokey放在右边,分成两个序列,递归直到low >= high * 步骤: * 1,设定两个指针low,high。初值是0和数组长度-1,指定关键字pivokey * 2,从high所指的位置向前找,找到一个比pivokey小的,和关键字交换值(arr[low] = arr[high]) * 3,从low所指的位置向后找,找到一个比pivokey大的,和关键字交换值 * 4,直到low>=high,把关键字赋值arr[low]=pivokey [...]


冒泡排序算法(JAVA)

冒泡排序:和每一个比较,如果比后面大则交换,最终每一趟结果是最大值会沉到后面。 时间复杂度O(n2),最佳情况是已排好序只比较n-1次,不用交换。 int[] bubbleSort(int[] a) { //每个都进行冒泡(一个一个来) for (int i = 0; i < a.length; i++) {   //和前n-i个比较,把最大的数沉下去 int temp; for (int j = 0; j < a.length – i – 1; j++) { if (a[j] > a[j + 1]) { //交换 temp = a[j]; a[j] = a[j + 1]; a[j + 1] = [...]


直接插入排序算法(JAVA版)

直接插入排序:遍历第二个到最后一个,找到每一个值的最佳位置,插进去:) 1.a[i]和前一个值a[i-1]比较,如果小于前一个值 2.设此值为temp,把a[i-1]向后移一位a[i]=a[i-1] 3.检查前面的a[<=i-2]是否有比temp大的,如果比temp大,后移一位 4.直到一个比temp小的或者j=-1,此时把temp赋值到j+1即可 举例子: 原序列:8 4 5 3 第一次 4 8 5 3 第二次 5<8,所以temp = 5, 序列变成 4 8 8 3,然后和i-2=0前面的4比较大小,5>4,所以5应该在1的位置上,把temp赋值到1位置上,4 5 8 3 第三次 3<8,所以temp = 3, 序列变成 4 5 8 8,然后和i-2=2前面的5比较大小,3>5,序列变成 4 5 5 8,再比较3>4,序列变成 4 4 5 8,此时j=-1,那temp肯定在0位上,最终序列3 4 5 8 public class Paixu {   /** * @param [...]


try finally中return的执行顺序

看代码吧,容易懂点。 public class Try { public static void main(String[] args) { System.out.println("最终结果:" + aa()); }   public static int aa() { int a = 1; try { System.out.println("try:" + a);   throw new Exception(); //return a; } catch (Exception e) { a = 2; System.out.println("catch:" + a); return a; } finally { a = 3; [...]