黑马程序员-----java基础之常用类
------- android培训、java培训、期待与您交流! ----------
最好的投资就是投资自己,知识越多,创造成就和财富的机率越高!
Collections工具类
Collections:这个类在java.util.包下,它是Collection集合的一个工具类,它里面的方法都是static,也就是说可以类名直接打点调用.
Collections中的常用方法介绍
1.sort方法
1.1
声明 public static void sort(List list)
作用根据集合中元素的自然顺序排序.
1.2
声明 public static void sort(List list,Comparator c)
作用对集合中的元素按照指定比较器c,进行排序.
2.max,min
2.1max
声明 public static T max(List<T> list);
作用根据集合中元素的自然顺序,得到最大值
声明 public static T max(List<T> list,Comparator c)
作用:根据指定的比较器c,得到集合中最大值
2.2min
声明 public static T min(List<T> list);
作用根据集合中元素的自然顺序,得到最小值
声明 public static T min(List<T> list,Comparator c)
作用:根据指定的比较器c,得到集合中最小值
3.shuffle
声明 public static void shuffle(List l)
作用 对集合中的元素进行乱序.
4.swap
声明 public static void swap(List l,int i,int j)
作用 对集合中i,j位置上的元素进行交换.
5.reverse
声明 public static voidreverse(List list)
作用 对集合中元素反转
6.binarySearch
二分法查找前提必须有顺序.
6.1
要求元素要进行先排序
声明 public static int binarySearch(List<T> list,T Key)
作用在list集合中查找key,如果查找到返回这个元素的索引。
如果不存在,返回的是(-(插入点)-1)
插入点代表key这个元素如果存在于集合中的索引。
6.2
声明 public static int binarySearch(List<T> list,T key,Comparatorc)
作用 在list集合中查找key,集合的元素的排列顺序根据比较器c来指定,如果查找到返回这个元素的索引。
如果不存在,返回的是(-(插入点)-1)
插入点代表key这个元素如果存在于集合中的索引。
将Collection下的集合由线程不安全的变成线程安全的。
1.将List集合变成线程安全
Listl=Collections.synchronizedList(List对象);
这个l就是线程安全的List对象
2.将Set集合变成线程安全的
Sets=Collections.synchronizedSet(Set对象);
s就线程安全的
3.将Map集合变成线程安全
Mapm=Collections.synchronizedMap(Map对象);
m就是线程安全的
Arrays工具类
Arrays: java.util包下,它里面的方法也是static的.
常用方法:
1.binarySearch
对数组进行二分法查找.
2.copyOf
复制数组
3.fill
对数组中的元素的值进行填充
4.sort
对数组进行排序
5.toString方法
声明:public static String toString(数组 arr){}
作用:将数组中的元素输出
格式 [元素1,元素2,...]
6.asList
List集合与数组相互转换
数组----->集合 asList
为什么要将数组转换成List集合?
List集合中提供的功能更多,我们使用起来更方便。
注意事项:
1.当将数组使用asList转换成一个List集合后,不能使用改变集合长度的方法。
2.当数组中的元素是基本类型时,是将这个数组做为元素存储到集合中。
数组中元素如果是Object,那么是将数组中的每一个元素存储到集合中。
集合----->数组 Collection中定义的toArray
Collection中的toArray方法
声明 public T[] toArray(T[] t);
作用:将集合中的元素装入到数组t中,并将这个数组返回。
对于参数数组的长度,如果小于,那么返回的数组长度就是集合中元素的个数。
如果参数数组的长度大于集合中元素的个数,那么返回的就是参数数组的长度的数组。
我们在开发中建议,参数数组长度与集合长度一致。
为什么要将集合变成数组?限定集合中元素的个数。
增强for
jdk1.5新特殊 增强for
增强for底层其实就是使用Iterator去实现的
格式:
for(元素类型变量名:集合或数组){
}
如果集合没有使用泛型,那么定义元素类型时就是Object。
如果使用了泛型,就可以定义成指定的类型.
只要实现了public interface Iterable<T>这个接口的容器,都可以使用增强for对其进行操作。
使用增强for的弊端:它只适合进行遍历,而不能在遍历过程中进行其它操作。
增强for优点:简化代码,方便了书写.
举例:
//使用增强for遍历List
public static void method1(){
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//增强for
for(int obj:list){ //将list集合中所有的元素进行迭代,每一个迭代出来的元素赋值给obj
System.out.println(obj);
}
//使用增强for对数组遍历
public static void method3(){
int[] arr={1,2,3};
for(int n:arr){
System.out.println(n);
}
}
可变参数
可变参数
在定义时使用类型...,这时其时代表的是一个数组,
我们在调用时,可以传递一个数组对象,也可以传递多个元素。
注意事项
可变参数后面不要在定义参数,如果要定义写在前面。
优点:简化代码
举例:
package com.itheima.test;
public classTest {
public static void main(String[] args) {
// 调用方法,传递参数.
int index = find(5,2, 3, 4, 5, 6, 7, 8, 9, 10);
System.out.println(index);
}
/**
* find
* 获取key在数组中的下标.
* 没有返回-1.
* */
// key就相当于(5, 2, 3, 4, 5, 6, 7,8, 9, 10);中的5
// int...arr就是第一个5的后面部分这个就叫可变参数.
public static int find(int key, int... arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
/*
// * 没有可变参数,我们和自由建成这样或者用数组.
privatestatic int find(int i, int j, int k, int l, intm, int n, int o,int p, int q, int r) {
return-1;
}
*/
}
jdk1.5新特性 静态导入
import static 包名.类名.静态方法名; 例如 import static java.lang.Math.*;
如果在某一个类中导入了静态方法,那么在这个类中
可以直接使用这个静态方法。而不需要去使用类名调用。
使用静态导入弊端:如果出现重复的方法名,这时区分不开。
并且代码不方便阅读。
Math
在java.lang下
这个类提供的方法是关于数学运行的方法,并且大部分都是静态的方法。
abs求绝对值
ceil得到最大的中的最小值
floor得到最小中的最大值
max(参数1,参数2) 得到两个参数中的最大值
min(参数1,参数2) 得到两上参数中的最小值
pow(参数1,参数2) 得到的是参数1的参数2次幂。
random 得到随机数 在jdk1.5后提供了Random类,在早期都使用的是Math类下的random方法
这个方法返回的是0-1之间的数,不包含1
round四舍五入
sqrt 开平方
举例:
package com.itheima.demo;
import staticjava.lang.Math.*;
//Math类的方法介绍
public classDemo2 {
public static void main(String[] args) {
// 绝对值
System.out.println(abs(-10));//静态导入
System.out.println(Math.abs(10));
// ceil floor
System.out.println(ceil(-1.5));//得到大于等于这个值的最小值
System.out.println(floor(-1.3));//得到比这个值小于等于的最大值
//max min
System.out.println(Math.max(10,11));
System.out.println(Math.min(10,11));
//pow 求几次方
System.out.println(Math.pow(4, 3));
//random
System.out.println(Math.random());//0-1之间的一个数,不包含1
//得到0-100之间的一个整数
int n=(int)(Math.random()*100);
System.out.println(n);
//round 四舍五入
System.out.println(round(3.5));
System.out.println(round(3.1));
//sqrt
System.out.println(sqrt(9));
}
}
Date
java.util包下
Date表示的是毫秒值.
Date构造方法
1.Date() 无参 表示的是当前时间
2.Date(longl)
构造一个从基准时间经过l毫秒后所达到的时间点
Date类下的成员方法
1.getTime
声明 public long getTime();
作用 得到Date对象表示的毫秒值
2.setTime
声明 public void setTime(long l)
作用 设置Date对象的毫秒值
//java.util.Date类介绍
public classDemo3 {
public static void main(String[] args) {
method2();
}
// Date(); getTime();
public static void method1() {
Date date = new Date();// 表示的是当前时间
long l = date.getTime();
System.out.println(l);//毫秒值
System.out.println(date); // Fri Apr 1911:53:52 CST 2013
}
//Date(long l) setTime(long l)
public static void method2(){
Date date=new Date(1366343883312L-24*60*60*1000);
date.setTime(10000);
System.out.println(date);
}
public static void method3(){
//一句话得到昨天这个时侯的时间System.out.println(newDate(newDate().getTime()-24*60*60*1000));
}
}
Calendar
java.util包下
这个类叫日历,它是我们现在处理时间日期应用比较多的类.
Calendar类的操作比Date类更丰富。
Calendar方法介绍
1.getInstance
声明 public static Calendar getInstance();
这个方法可以得到一个Calendar实例,其实真正的对象是子类对象。
2.get/set(重要)
用来操作Calendar字段的两个重要方法.
get
声明 public int get(int field)
作用 获得指定field日历字段的值。
set
作用:对日历字段进行设置成指定的值
声明 public void set(int field,int value)
作用对指定的字段进行设置
声明 public void set(int year,int month,int date)
作用对年,月,日进行设置
public void set(intyear,int month,int date,int hour,int minute)
publicvoid set(int year,int month,int date,int hour,int minute,int second)
3.getTimeInMillis/setTimeInMillis
作用与Date类中的getTime/setTime方法作用一样。
声明 public long getTimeInMillis();
getTimeInMillis作用是获得毫秒值
声明 public void setTimeInMillis(long l);
setTimeInMillis作用是设置毫秒值
4.add
声明 public void add(int field,int value)
作用:对指定的日历字段进行加value操作。
5.Date与Calendar相互转换
Date----->Calendar
Calendar类中的setTime方法
声明 public void setTime(Date date)
作用将date表示的时间设置给Calendar对象.
Calendar---->Date
Calendar类中的getTime方法
声明 public Date getTime();
作用将一个Calendar对象表示的时间转换成Date对象.
示例:
package com.itheima.demo3;
//Calendar对象真实类型是什么
import java.util.Calendar;
import java.util.Date;
public class Demo1 {
publicstatic void main(String[] args) {
method4();
}
//获得Calendar的毫秒值
publicstatic void method4(){
CalendarrightNow = Calendar.getInstance(); //当前时间
Datedate=new Date(); //当前时间
date.setTime(1);
rightNow.setTimeInMillis(1);
System.out.println(date.getTime());
System.out.println(rightNow.getTimeInMillis());
}
//求今年的10.1号是这一年的第几天
publicstatic void method3(){
CalendarrightNow = Calendar.getInstance();
//rightNow.set(2013,9, 1); //直接设置 年月 日
rightNow.set(Calendar.MONTH,9); //对月份进行修改
rightNow.set(Calendar.DATE,1);//对日期进行修改
intday=rightNow.get(Calendar.DAY_OF_YEAR);
System.out.println(day);
}
//求今天是这一年的第几天
publicstatic void method2(){
CalendarrightNow = Calendar.getInstance();
intday=rightNow.get(Calendar.DAY_OF_YEAR);
System.out.println(day);
}
//get 获得年,月日小时分钟秒
publicstatic void method1() {
CalendarrightNow = Calendar.getInstance();
//年
intyear = rightNow.get(Calendar.YEAR);
//月
intmonth = rightNow.get(Calendar.MONTH); // 月份从0开始 0代表一月份
//日
intday = rightNow.get(Calendar.DATE);
//int day=rightNow.get(Calendar.DAY_OF_MONTH);
//小时
//inthour = rightNow.get(Calendar.HOUR); //12小时制
inthour=rightNow.get(Calendar.HOUR_OF_DAY); //24小时制
//分钟
intminute = rightNow.get(Calendar.MINUTE);
//秒
intsecond = rightNow.get(Calendar.SECOND);
System.out.println(year+ "年" + (month + 1) +"月" + day + "日" + hour
+"时" + minute +"分" + second +"秒");
}
}
DateFormat(父类) 与SimpleDateFormat(子类)
这两个类在java.text包下.
这两个类的作用是对时间日期(Date)进行格式化
DateFormat类中提供的方法
1.getDateInstance
获得一个日期的格式化器
声明
publicstatic DateFormat getDateInstance();
publicstatic DateFormat getdateInstance(int style); //可以指定样式
2.getDateTimeInstance
获得一个日期时间格式化器
声明
publicstatic DateFormat getDateTimeInstance();
publicstatic DateFormat getDateTimeInstance(int dateStyle,int timeStyle);
3.format
声明 public String format(Date date)
作用将日期对象格式化成指定的样式的字符串。
SimpleDateFormat
我们在定义SimpleDateFormat对象时可以给其指定模式,
这样我们在对时间进行格式化操作时,得到的字符串就是
指定的模式的字符串。
例如
SimpleDateFormatsdf=new SimpleDateFormat("yyyy/MM/dd");
Strings=sdf.format(new Date()); //2013/04/19
日期(Date)---format方法--->String
String-------parse方法------------>Date
在分析时必须给指定一个当前要分析的字符串的样式是什么样?
"2013-10-10"--->日期
"2013/10/10"---->日期
parse方法
声明 public Date parse(String s) throws ParseException
作用将一个字符串分析成日期
注意:当前要分析的字符串,必须给其指定的模式
示例:
package com.itheima.demo3;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public classDemo3 {
public static void main(String[] args) {
method3();
}
// 将一个字符串分析成日期
public static void method3() {
String s = "2008/08/08 20:08:08"; // 要将这个字符串分析成日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 指定义这个模式的目的是让sdf知道怎样分析s这个字符串。
try {
Date date = sdf.parse(s); // parse它抛出一个ParseException,这个异常是一个编译异常
System.out.println(date);
//System.out.println((newDate().getTime()-date.getTime())/(24*60*60*1000));//得到奥运会开始到现在经过了多少天.
}catch(ParseExceptione) {
System.out.println("不能解析的字符串");
}
}
// SimpleDateFormat
public static void method2() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd");
String s = sdf.format(new Date());
System.out.println(s);
}
// DateFormat介绍
public static void method1() {
// String s=DateFormat.getDateInstance().format(newDate());
// DateFormat df =DateFormat.getDateInstance(DateFormat.FULL); //
// 获得很个日期DateFormat实例,其实是子类对象
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.FULL); // 获得日期时间格式器
System.out.println(df); // java.text.SimpleDateFormat@ef7951d7
String s = df.format(new Date());
System.out.println(s);// 2013-4-19
}
}
System
java.lang包
System类不能实例化
System.out.println():
//System 类
//out System类中的一个静态属性
//println方法 out所属类的对象 ,out它是PrintStream类的对象.
常见的方法:
1.exit(inti)
System.exit(0);停止jvm
2.gc()
System.gc();它执行时 finzlized方法会被调用。
3.currentTimeMillis
System.currentTimeMillis();
这个方法得到的是从基准时间开始所经过的毫秒值。
4.getProperties
Propertiesp=System.getProperties();
这个方法得到的是当前系统的一些信息.
5.getProperty
Stringvalue=System.getProperty(String key)
作用:是获得当前系统的某一个指定key的值.
6.setProperty
System.setProperty(Stringkey,Stirng value);
在System中设置key与value
示例:
package com.itheima.demo4;
import java.util.Properties;
public classDemo1 {
public static void main(String[] args) {
method2();
}
// System
public static void method1() {
System.out.println();
// System 类
// out System类中的一个静态属性
// println 方法 out所属类的对象
}
public static void method2() {
//System.setProperty("mypath","c:\\a.txt");
Properties prop = System.getProperties();
String value=prop.getProperty("os.name");
System.out.println(value);
/*Set set = prop.keySet();
for(Object key : set) {
System.out.println(key+ "------" + prop.get(key));
}*/
//System.out.println(System.getProperty("os.name"));
}
}
Runtime
Runtime它是一个单实例实现的。
它可以让一个进程执行。
1.getRuntime
它获得一个Runtime实例
2.exec
publicProcess exec(String s);
它可以执行一个进程
s就代表的是某个进程的路径与名称.
它返回的是一个Process对象
Process代表一个进程,它里面提供一个destroy方法。
这个方法可以将某个进程销毁。
示例:
package com.itheima.demo4;
import java.io.IOException;
public classDemo2 {
public static void main(String[] args) {
method2();
}
public static void method2(){
try {
Runtime.getRuntime().exec("shutdown -s");//准备关机.
}catch(IOExceptione) {
e.printStackTrace();
}
}
// 使用java程序打开一个记事本 notepad.exe
public static void method1() {
try {
Process p = Runtime.getRuntime().exec("D:\\飞秋\\飞秋c.exe");// 获得一个Runtime实例
for (int i = 0; i < 5; i++) {
Thread.sleep(1000);
System.out.println(i);
}
p.destroy();
}catch(IOExceptione) {
e.printStackTrace();
}catch(InterruptedExceptione) {
e.printStackTrace();
}
}
}
Properties
它其实也是一个Map,但是它的key与value类型全是String
1.String getProperty(String key)
根据key获得value
2.list
将 Properties对象中的内容写入到文件中。
3.load
将文件中的内容读到到Properties对象