安卓学习记录03

一. 安卓部分

5月5号到7号

1. 学习了安卓中的数据库SQLite的增删改查德操作,有两种实现的方式,一种是调用execSQL(sql)对数据库进行操作,一种是用api提供的insert(),delete(),update(),query()的方法对数据库进行操作。

2. 学习了ContentProvider,ContentResolver的功能和使用,但是只是初步的了解,还需要再进一步的俄研究,现在对他们的了解是,ContentProvider负责把数据都暴露出来,ContentResolver负责把暴露出来的数据进行操作,同时还引入了安卓对Uri的操作提供的两个类:UriMatcher,ContentUris。

3. 总结:这部分内容很像JDBC的内容,都是对数据库的数据进行操作,安卓中也有事务这一概念,今天对事务的了解更进一步了,之前只是会使用事务,现在也明白了它为什么要使用事务?因为使用事务之后,我们对数据库的数据的一些操作如果正常的运行,使用事务之后,操作后的数据就会永久的保存在磁盘中,那如果运行中有异常,使用事务就会把数据回滚到没有进行任何操作之前的状态,从而不会导致数据的错误。此外,事务的使用还可以大大的减少运行的时间,比如同时向数据库中添加10000条记录,使用事务所耗用的时间大约是没使用事务的九分之一。

二. 算法部分

1.   用2*1的小矩形横着或者竖着摆放更大的矩形,问用n个2*1的小矩形无重叠的覆盖一个2*n的大矩形,总共有多少种方法

public  classZifu {
4.      publicstaticvoidmain(String[]args){
5.          inti =RecCover(4);
6.          System.out.println(i);
7.          
8.      }
9.      
10.     publicstaticintRecCover(inttarget){
11.         if(target
12.             return 0;
13.         }elseif(target
14.             return 1;
15.         }elseif(target
16.             return 2;
17.         }else{
18.             returnRecCover(target - 1) +RecCover(target
19.         }
20.     }
21.    }

22.    注意:说明target为0时,如果第一次是2*1摆放的,那么摆放方法一共有target(n-1),如果第一次是1*2摆放的,那么摆放的方法是target(n-2)。

   

2.在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序.请完成一个函数,输入这样一个二维数组,和一个整数,判断数组中是否含有该整数.

public  classZifu {
    public  static void main(String[]  args) {
        System.out.println(find(newint[][]{{1, 2, 3}, {4, 5,6}, {7, 8, 9}}, 0));
        
    }
    
    public  static boolean find(int[][]array ,inttarget){
        int  rowCount = array.length;
        int  colCount = array[0].length;
        int  i, j;
        for(i =rowCount - 1,j = 0;i>0 &&j<colCount;){
            if(target ==array[i][j])
                returntrue;
            if(target <array[i][j]){
i
                continue;
            }
            if(target >array[i][j]){
j++;
                continue;
            }
        }
        return  false;
    }
}

注意:java中的二维数组,arry.length的大小是二维数组的行数,arry[0].length的大小是二维数组的列数。