黑马程序员——排序、正则表达式、时间类

来源:互联网 发布:淘宝付费流量是什么 编辑:程序博客网 时间:2024/06/09 20:58

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------


一.排序
1选择排序
int[] arr = {66,55,44,33,22,11};
原理:如果拿0角标上的元素依次和后面的元素进行比较,
              第一次内循环结束后,最小值出现在了0角标位置。
arr[0]与arr[1-5]比了五次
arr[1]与arr[2-5]比了四次
arr[2]与arr[3-5]比了三次
arr[3]与arr[4-5]比了二次
arr[4]与arr[5]比了一次
 
arr[x]与arr[y]比较
数组长度是6


for (int x = 0;x < arr.length - 1;x++){    for (int y = x + 1;y < arr.length;y++){        if (arr[x] > arr[y]){            int temp = arr[x];            arr[x] = arr[y];            arr[y] = temp;        }    }}


2冒泡排序
int[] arr = {66,55,44,33,22,11};
原理:两个相邻元素进行比较,第一次比较完以后,最大值出现在了最大角标处。
第一次:arr[0]与arr[1],arr[1]与arr[2],arr[2]与arr[3],arr[3]与arr[4],arr[4]与arr[5],比了五次
第二次:arr[0]与arr[1],arr[1]与arr[2],arr[2]与arr[3],arr[3]与arr[4]比了四次
第三次:arr[0]与arr[1],arr[1]与arr[2],arr[2]与arr[3]比了三次
第四次:arr[0]与arr[1],arr[1]与arr[2]比了二次
第五次:arr[0]与arr[1]比了一次


for (int x = 0;x < arr.length - 1; x++){    //-1防止角标越界    //-x为了提高效率    for (int y = 0;y < arr.length - 1 - x;y++){//6        if (arr[y] > arr[y+1]){            int temp = arr[y];            arr[y] = arr[y+1];            arr[y+1] = temp;        }    }}


3,查找
A:无序数组

int[] arr = {33,22,11,44,55,66};public static int getIndex(int[] arr,int key) {    for (int x = 0;x < arr.length;x++){        if (key == arr[x]){            return x;        }    }    return -1;}


B:有序数组 二分查找
数组长度是6,最大角标值是5

public static int getIndex(int[] arr,int key) {    int min = 0;    int max = arr.length-1;    int mid = (min + max)/2;    while (key != arr[mid]){        if (key > arr[mid]){            min = mid + 1;        }else if (key < arr[mid]){            max = mid - 1;        }        if (min > max){            return -1;        }        mid = (min + max)/2;    }    return mid;}

二.正则表达式


1.什么是正则表达式
是一种字符串的约束格式, 例如在某些网站上填写邮箱的时候, 如果乱写会提示输入不合法, 这种验证就


是使用正则表达式做的.
2.匹配
String里的matches() 验证一个字符串是否匹配指定的正则表达式"18612345678".matches("1


[34578]\d{9}");
3.分割
String里的split() 用指定正则表达式能匹配的字符作为分隔符, 分割字符串
4.替换
String里的replaceAll("","") 把字符串中能匹配正则表达式的部分替换为另一个字符串
5.查找
Pattern.compile() 创建正则表达式对象
Pattern.matcher() 用正则表达式匹配一个字符串, 得到匹配器
Matcher.find() 查找字符串中是否包含能匹配正则表达式的部分
Matcher.group() 获取匹配的部分


三.BigInteger


1.创建对象
可以使用BigInteger(String)来创建一个很大的整数, 精度可以无限大, 值创建之后不会被改变(类似


String)
2.常用方法
BigInteger add(BigInteger val) //加
BigInteger subtract(BigInteger val) //减
BigInteger multiply(BigInteger val) //乘
BigInteger divide(BigInteger val) //除
BigInteger mod(BigInteger m ) //模
BigInteger max(BigInteger val) //两个数的最大值
BigInteger min(BigInteger val) //两个数的最小值


四.BigDecimal
1.创建对象
BigDecimal(double); //不建议用,运算结果不精确
BigDecimal(String); //可以,但是每次都要传字符串给构造函数
static BigDecimal valueOf(double) //可以,而且可以直接传double数
因为double数是不精确,是无限接近那个数,用BigDemal这个类可以让其精确
2.常用方法
BigDecimal add(BigDecimal augend)
BigDecimal subtract(BigDecimal subtrahend)
BigDecimal multiply(BigDecimal multiplicand)
BigDecimal divide(BigDecimal divisor)


五.时间类
1.Date
比较古老的一个类, 大多数方法已过时, 但通常我们还会用它来获取当前时间,new Date()可以创建日期
对象, 然后使用SimpleDateFormat可以将其格式化成我们需要的格式,通常使用的格式为: "yyyy-MM-dd 
HH:mm:ss", 具体格式说明详见SimpleDateFormat类yyyy年MM月dd日 E HH:mm:ss
a.获取当前时间的毫秒值
Date d = new Date();
d.getTime(); //获取的是1970年1月1日0时0分0秒到当前时间的毫秒值
System.currentTimeMillis();
b.将毫秒值转换成时间对象
Date d = new Date(毫秒值) //通过毫秒值获取时间对象
Date d = new Date(); //创建时间对象
d.setTime(毫秒值); //根据毫秒值修改时间对象
2.Calendar
很多方法都是替代了Date类的方法, 最常用的就是
int get(int field)(Calendar.YEAR) //通过传入的字段获取对应的值,(获取年对应的值)
void add(int field, int amount) //field代表传入的时间字段可以是年月日等,amount代表是数值,正
数就是在传入的字段上加,负数减
void set(int field, int value) //field代表传入的时间字段可以是年月日等,value代表设置的值,想
设置哪一年或月日等,就写哪个值
void set(int year, int month, int date)
可以对指定的字段获取, 设置, 以及增减 六.Math
提供了一些和数学运算相关的方法,
static double PI //获取π(派)的值
static double floor(double a) //是小于等于a这个double值的最大整数对应的double值
static double ceil(double a) //是大于等于a这个double值的最小整数对应的double值
static long round(double a ) //四舍五入,返回是一个long值
static double sqrt(double a) //开平方
static double pow(double a, double b) //a是底数,b是指数返回的是a的b次幂


-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0
原创粉丝点击