冒泡排序
排序: 将一组数据按照固定的规则进行排列
冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按照要求完成排序
- 如果有N个数据进行排序,总共需要比较N-1次
- 每一次比较完毕,下一次的比较就会少一个数据参与
public static void main(String[] args) {
int[] arr = {26,56,89,48,16,77};
System.out.println("排序前: " + arrayToString(arr));
for (int x=0; x<arr.length-1; x++) {
for (int i=0; i<arr.length-1-x; i++) {
if (arr[i] > arr[i+1]) {
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
System.out.println("排序后: " + arrayToString(arr));
}
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i=0; i < arr.length; i++) {
if (i == arr.length - 1){
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(",");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
Arrays类
public static void main(String[] args) {
int[] arr = {26,56,89,48,16,77};
System.out.println("排序前: " + Arrays.toString(arr));
Arrays.sort(arr);
System.out.println("排序后: " + Arrays.toString(arr));
}
工具类的设计思想:
- 构造方法用private 修饰,是为了防止外界传递对象
- 成员用public static 修饰,是为了让用类名来访问
基本类型包装类
Integer 类的使用
public static void main(String[] args) {
Integer i1 = new Integer(100);
System.out.println(i1);
Integer i2 = new Integer("100");
// Integer i2 = new Integer("abc"); // 字符串必须是数字
System.out.println(i2);
Integer i3 = Integer.valueOf(100);
System.out.println(i3);
Integer i4 = Integer.valueOf("100");
System.out.println(i4);
}
int 和String 的相互转换
基本类型包装类的最常见操作就是: 用于基本类型和字符串之间的相互转换
public static void main(String[] args) {
// int --> String
int num = 100;
// 方法1
String s1 = "" + num;
System.out.println(s1);
// 方法2
String s2 = String.valueOf(num);
System.out.println(s2);
System.out.println("--------");
// String --> int
String s = "100";
// 方式1
Integer i = Integer.valueOf(s);
int x = i.intValue();
System.out.println(x);
// 方式2
int y = Integer.parseInt(s);
System.out.println(y);
}
- int 转换为 String
public static String valueOf(int i)
: 返回 int 参数的字符串表示形式.该方法是 String 类中的方法 - String 转换为 int
public static int parseInt(String s)
: 将字符串解析为 int 类型. 该方法是 Integer 类中的方法
案例: 字符串中数据排序
public static void main(String[] args) {
// 定义一个字符串
String s = "99 41 63 93 23 78";
// 把字符串中的数据存储到一个int类型的数组中
String[] strArray = s.split(" ");
// for (int i=0; i<strArray.length; i++) {
// System.out.println(strArray[i]);
// }
// 定义一个int数组,把 String[] 数组中的每一个元素存储到 int 数组中
int[] arr = new int[strArray.length];
for (int i=0; i<arr.length; i++) {
arr[i] = Integer.parseInt(strArray[i]);
}
// for (int i=0; i<arr.length; i++) {
// System.out.println(arr[i]);
// }
// 对int 数组进行排序
Arrays.sort(arr);
// 把排序后的 int 数组中的元素进行拼接得到一个字符串,这里拼接使用StringBuilder来实现
StringBuilder sb = new StringBuilder();
for (int i=0; i<arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(" ");
}
}
String result = sb.toString();
// 输出结果
System.out.println("result: " + result);
}
自动装箱和拆箱
- 装箱: 把基本数据类型转换为对应的包装类类型
- 拆箱: 把包装类类型转换为对应的基本数据类型
public static void main(String[] args) {
// 装箱: 把基本数据类型转换为对应的包装类类型
Integer i = Integer.valueOf(100);
Integer ii = 100; // 自动装箱,隐藏了Integer.valueOf(100)这一步
// 拆箱: 把包装类类型转换为对应的基本数据类型
// ii += 200;
// ii = ii.intValue() + 200; // 拆箱
ii += 200; // 自动拆箱,隐藏了ii.intValue() + 200这一步
System.out.println(ii);
Integer iii = null; // NullPointerException
if (iii != null) {
iii += 300; // 因为iii = null,null是无法调用intValue()方法的
}
}
- 注意: 在使用包装类型的时候,如果做操作,最好先判断是否为null
- 推荐: 只要是对象,在使用前就必须进行不为null的判断
Date
public static void main(String[] args) {
Date d1 = new Date();
System.out.println(d1); // Sun Mar 29 13:10:13 CST 2020
long date = 1000*60*60;
Date d2 = new Date(date);
System.out.println(d2); // Thu Jan 01 09:00:00 CST 1970 因为是东八区所以是9点
}
Date 类的常用方法
public static void main(String[] args) {
Date d = new Date();
System.out.println(d.getTime());
System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
// long time = 100*60*60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
}
SimpleDateFormat 类
public static void main(String[] args) throws ParseException {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
String ss = "2020-08-09 11:11:11";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
}
案例: 日期工具类
public class DateUtils {
private DateUtils() {
}
public static String dateToSrting(Date data, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format(data);
return s;
}
public static Date stringToDate(String s,String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(s);
return d;
}
}
public static void main(String[] args) throws ParseException {
Date d = new Date();
String s1 = DateUtils.dateToSrting(d,"yyyy年MM月dd日 HH:mm:ss");
System.out.println(s1);
String s2 = DateUtils.dateToSrting(d,"yyyy年MM月dd日");
System.out.println(s2);
String s3 = DateUtils.dateToSrting(d,"HH:mm:ss");
System.out.println(s3);
System.out.println("--------");
String s = "2020-08-09 12:12:12";
Date dd = DateUtils.stringToDate(s,"yyyy-MM-dd HH:mm:ss");
System.out.println(dd);
}
Calendar 类
- Calendar 为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
- Calendar 提供了一个类方法 getInstance 用于获取 Calendar 对象,其日历字段已使用日期和时间初始化:
Calendar rightNow = Calendar.getInstance()
public static void main(String[] args) throws ParseException {
Calendar c = Calendar.getInstance();
System.out.println(c);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
}
Calendar 的常用方法
public static void main(String[] args) throws ParseException {
Calendar c = Calendar.getInstance();
System.out.println(c);
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH);
// int date = c.get(Calendar.DATE);
// System.out.println(year + "年" + month + "月" + date + "日");
// c.add(Calendar.YEAR,-3); // 减三年
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH);
// int date = c.get(Calendar.DATE);
// System.out.println(year + "年" + month + "月" + date + "日"); // 2017年2月29日
// c.add(Calendar.YEAR,10); // 十年后
// c.add(Calendar.DATE,-5); // 减五天
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH);
// int date = c.get(Calendar.DATE);
// System.out.println(year + "年" + month + "月" + date + "日"); // 2030年2月24日
c.set(4044,11,11);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日"); // 4044年11月11日
}
案例: 二月天
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份: ");
int year = sc.nextInt();
// 设置日历对象的年月日
Calendar c = Calendar.getInstance();
c.set(year,2,1);
c.add(Calendar.DATE,-1);
int date = c.get(Calendar.DATE);
System.out.println(year + "年的2月份有" + date + "天");
}