西安北郊做网站公司/进一步优化营商环境
整理下这一周的最后一些内容。虽然东西不多,但以后也可以常回来看看。
个人感觉还是代码最好表达自己想要记忆的东西,不够的话再把注释加上。乱七八糟的概念百度上大同小异,只有代码是属于你自己的,是唯一的,也是你应该留下的。
包装类
我们所使用的一般数据类型,又称为值类型。这种数据类型存储在栈中,不属于对象的范畴。但Java是一门面向对象的语言,万物皆对象,自然不能把这些值类型排除在外,所以有了包装类。
所谓包装类,就是把我们所用到的值类型变量进行一个包装,使我们能通过对象的方式对其进行操作,让其有自己的属性和方法。把值类型数据包装成引用数据类型的这一过程又称为装箱,而这一逆过程则称之为拆箱。
包装类的对应关系:
一般情况,我们的编译器会对数据进行自动装箱拆箱:
1 int aInt = 0;2 Integer aInteger = aInt; //自动装箱
3 int aI2i = aInteger; //自动拆箱
自动装箱拆箱
常用的一些方法及与字符串之间的相互转换(以Integer为例)
同样,String类提供了各基本数据类型转换成String的相应方法:static String
日期工具类
1、类 Date
常用的方法:
Date when) 跟另外一个Date对象比较,返回是否在when之后。
Date when) 跟另外一个Date对象比较,返回是否在when之前。
Date 对象表示的毫秒数。
Date类的操作方法十分之少,主要是由于Calendar类和DateFormat类的出现,使其只作为一个很鸡肋的存在,除了获取毫秒数,基本没有别的功能,对Date对象的操作都交由DateFormat来处理。
2、类 SimpleDateFormat
从名字我们就可以看出,这是一个对时间进行格式化处理的类,通过该类我们可以指定Date对象以特定的格式显示,也可以使特定格式的字符串转成一个Date对象。
一些模式字母:
y 年
M 月
d 天
w 年中的周数
W 月中的周数
E (星期中的天数)星期
H 小时(0~23)
h 小时(1~12)
s 秒数
S 毫秒数
常用到的方法:
SimpleDateFormat。
String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
String pattern) 将给定模式字符串应用于此日期格式。
Date date) 将日期格式化成日期/时间字符串。(jdk1.8)
String text) 从给定字符串的开始解析文本以生成日期。(jdk1.8)
1 Date date = newDate();2 //实例化SimpleDateFormat对象并传入特定格式
3 SimpleDateFormat spdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");4 //将date格式化后转成字符串
5 String nowDateString =spdf.format(date);6 //打印格式化日期字符串
7 System.out.println(nowDateString);
通过SimpleDateFormat实现Date转String
1 2018-07-22 20:20:24 星期日
打印结果1
1 //将spdf应用新的格式
2 spdf.applyPattern("yyyy-MM");3 try{4 //将特定格式字符串转成Date对象,抛出ParseException
5 Date str2Date = spdf.parse("2018-9");6 //获取转换后的时间戳
7 long str2DateMills =str2Date.getTime();8 System.out.println(str2DateMills);9 } catch(ParseException e) {10 System.out.println("日期格式错误!");11 }
通过SimpleDateFormat实现String转Date
1 1535731200000
打印结果2
3、类 Calendar(abstract)
日历类比日期类功能要丰富很多,它提供了很多对时间字段的获取和操作方法,但它不能被SimpleDateFormat操作,所以只能自己写算法实现对其时间的格式输出和与字符串之间的相互转换。
一些事件字段(静态常量,在get、set等方法中被使用):
常用方法:
Date date) 使用给定的 Date 设置此 Calendar 的时间
使用比较简单,这里只演示一个将字符串转换为Calendar格式方法: 先通过SimpleDateFormat将字符串转成Date对象,再通过setTime方法来对Calendar进行设置。
1 System.out.println("请输入一个日期(xxxx-xx-xx):");2 String str =scanner.next();3 try{4 //字符串转Date并通过Date设置Calendar
5 calendar.setTime(sdf.parse(str));6 } catch(ParseException e) {7 System.out.println("时间格式错误!");8 return;9 }
通过控制台输入设置Claendar对象
Arrays 工具类
常用方法
使用二分搜索法来搜索指定的 byte 型数组的范围,以获得指定的值。
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
将指定数组的指定范围复制到一个新数组。
如果两个指定的 byte 型数组彼此相等,则返回 true。
将指定的 byte 值分配给指定 byte 节型数组的每个元素。
对指定的 byte 型数组按数字升序进行排序。
对指定 byte 型数组的指定范围按数字升序进行排序。
在使用Arrays工具类的二分法查找时,由于二分法的原理(先将数组一分为二,再与其中间元素进行对比,按对比结果判断要查找的元素在哪一半,直到找到该元素,返回下标),所以必须先将该数组进行排序,否则所找到的结果并无意义。
public int myBinarySearch(int[] arr, intobj) {//查找长度
int len =arr.length;//要进行比较的元素
int index = (len-1)/2;//数组边界(元素所在位置为arr[bound, arr.length - 1])
int bound = 0;while (true) {if (arr[index]
if(arr[index+1]>obj) {return -1;
}
bound=index;
index= len -index;
index/= 2;
index= bound +index;
}else if (arr[index]>obj) {//与arr[index]
if(arr[index-1]
}
index/= 2;
}else{//判断元素是否重复,重复则找到第一个出现的元素
while (arr[index-1]==obj) {
index--;
}returnindex;
}//判断查找范围是否越界
if (index<0 || index>arr.length-1) {return -1;
}//判断元素首部和尾部是否为该元素,是则返回index
if (index==0 || index==arr.length-1) {if(arr[index]==obj) {returnindex;
}else{return -1;
}
}
}
}
二分法查找实现
Collections 工具类
常用方法
Collection super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
List extends Comparable super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象(实现Comparable接口)。
List extends T> list, T key, Comparator super T> c) 使用二分搜索法搜索指定列表,以获得指定对象(传入Comparator比较器)。
List super T> dest, List extends T> src) 将所有元素从一个列表复制到另一个列表。
List super T> list, T obj) 使用指定元素替换指定列表中的所有元素。
Collection extends T> coll) 根据元素的自然顺序,返回给定 collection 的最大元素。
Collection extends T> coll, Comparator super T> comp) 根据指定比较器产生的顺序,返回给定 collection 的最大元素。
Collection extends T> coll) 根据元素的自然顺序 返回给定 collection 的最小元素。
Collection extends T> coll, Comparator super T> comp) 根据元素的自然顺序 返回给定 collection 的最小元素。
List> list) 反转指定列表中元素的顺序。
List list) 根据元素的自然顺序 对指定列表按升序进行排序。
List list, Comparator super T> c) 根据元素的自然顺序 对指定列表按升序进行排序。
List> list, int i, int j) 在指定列表的指定位置处交换元素。
由于Collection集合所存元素皆为对象,所以要进行比较,必须实现Comparable接口或者传入Comparator比较器,否则无法进行比较。进行二分法查找时,同样需要现将集合进行排序后再进行查找,否则查找结果无意义。