java小白一枚,整理了一些需要记忆的常用类方便学习。
分割线------------------------------------------------------------------------------------------------------
一、Collections集合常用类
常用静态方法:
1、sort()
功能:排序
2、binarySearch()
功能:查找元素索引值
注:需要先排序
3、max()/min()
功能:查找最大/最小值
二、集合与数组的转换
集合转数组:list.toArray(new String[list.size()])
数组转集合:Arrays.asList(str);
三、包装类
1、java共有8中基本数据类型,每种类型对应一种包装类
2、包装类的作用
迎合JAVA面对对象的思想,解决基本数据类型不是对象,无属性,无方法带来的一系列问题。
3、实用方法
public class NewPackClass {
public static void main(String[] args) {
//包装类的构造方法(基本类型)
Integer int1=new Integer(1);
Double double1=new Double(23.333);
Character char1=new Character('a');
Boolean boolean1=new Boolean(true);
//包装类的构造方法(字符串类型)除Character类以外
Integer int2=new Integer("2");
Double double2=new Double("2.3333");
Boolean boolean2=new Boolean("ture");
//valueOf():基本类型 ->包装类
Integer int3=Integer.valueOf(3);
Double double3=Double.valueOf(23.333);
Character char3=Character.valueOf('a');
Boolean boolean3=Boolean.valueOf(true);
//valueOf():字符串 -> 包装类
Integer int4=Integer.valueOf("4");
Double double4=Double.valueOf("23.33");
Boolean boolean4=Boolean.valueOf("false" );
//toString():基本类型->字符串
String character=Character.toString('a');
String int5=Integer.toString(11);
String dou=Double.toString(234.3);
String is=Boolean.toString(true);
//xxValue():包装类 ->基本类型
int id=int1.intValue();
double xxx=double1.doubleValue();
//prasexx():字符串->基本类型(Character除外)
int idd=Integer.parseInt("1");
boolean bb=Boolean.parseBoolean("true");
//包装类-自动装箱和拆箱
int i=new Integer(10); //拆箱
Integer i1=10; //装箱
System.out.println(i+" "+i1);
}
}
4、集合中不允许存放基本数据类型数据,需要存储数字时需要放入包装类型
四、String
1、特点
不可变性 一个对象是不可变动 。需要拷贝的对象的内容时不用复制它本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存,效率也很好。对于其他引用同一个对象的其他变量也不会造成影响。
2、使用final String对象存储
String t="asdf";
String a="aadf";
3、String位于java.lang包中,具有丰富的方法
String t="asdf";
String a="aadf";
//字符串常用方法
System.out.println("字符产的长度:"+t.length());
System.out.println("比较字符串的内容:"+t.equals(a));
System.out.println("字符串的拼接:"+"<%"+t+">");
System.out.println("字符串的拼接:"+"<".concat(t).concat(">"));
System.out.println("搜索第一个出现的字符:"+t.indexOf('s'));
System.out.println("搜索第一个出现的字符串:"+t.indexOf("df"));
System.out.println("搜索第一个传销的字符:"+t.lastIndexOf('s'));
System.out.println("搜索第一个出现的字符串:"+t.lastIndexOf("df"));
System.out.println("截取字符串:"+t.substring(1));
System.out.println("截取字符串的范围:"+t.substring(1,3));
String b=" Hello World ";
System.out.println("消除前后的空格:"+b.trim());
System.out.println("字符串替换:"+b.replace(" ",""));
String[] i=b.split(" ");
System.out.println("分割字符串:"+Arrays.toString(i));
String j="this is MY STRING";
System.out.println("到大写:"+j.toUpperCase());
System.out.println("到小写:"+j.toLowerCase());
System.out.println("忽略大小写:"+"ABC".equalsIgnoreCase("abc"));
4、“==”和equals()的区别
"==":判断两个字符串在内存中的地址,即判断是否是同一个对象
equals():检查组成字符串的字符是否完全一致
equals()源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
5、String创建方式不同
public class NewString {
public static void main(String[] args) {
String s1="Hello World";
String s2="Hello World";
String s3="Hello"+" World";
String s4=new String("Hello World");
String s5=new String("Hello World");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1==s3);
System.out.println(s4==s5);
System.out.println(s4.equals(s5));
}
}
输出结果:
true
true
true
false
true
原理分析图:
五、StringBuffer
1、特点
可变字符串 需要对字符串频繁修改(如字符串连接)使,使用StringBuffer类可以大大提高程序执行的效率。
2、与String、StringBuilder的对比
String:不可变对象。经常改变内容的字符串最好不要使用String。
StringBuffer:可变字符串。内容经常需要改变时可以使用StringBuffer,更加高效。
JDK5.0提供了StringBuilder,等价StringBuffer。
StringBuffer:线程安全
StringBuilder:线程非安全的-并发
3、声明及常用方法
import java.util.Scanner;
public class NewStringBuffer {
public static void main(String[] args) {
//StringBuffer声明
String str="java";
StringBuffer s1=new StringBuffer(str);
StringBuffer s2=new StringBuffer("java");
System.out.println(s1+" "+s2);
System.out.println("-----------------------");
//toString() 转化为String
String str1=s1.toString();
String str2=s2.toString();
System.out.println(str1+" "+str2);
System.out.println("------------------------");
//append() 追加字符串
s1.append("-1").append("-2");
System.out.println(s1);
System.out.println("-----------------------");
//insert() 插入字符串
s2.insert(0,"--");
System.out.println(s2);
s2.insert(1,"**");
System.out.println(s2);
System.out.println("---------------------------");
//删除字符
s1.delete(1,2);//顾前不顾后
System.out.println(s1);
s1.deleteCharAt(1).deleteCharAt(3);
System.out.println(s1);
System.out.println("-------------------------------");
}
}
输出结果:
java java
-----------------------
java java
------------------------
java-1-2
-----------------------
--java
-**-java
---------------------------
jva-1-2
ja--2
-------------------------------
六、日期
java.util.Date类:表示日期和时间
java.util.SimpleDateFormat:日期格式化
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class NewDate {
public static void main(String[] args) {
//创建日期对象
Date d1=new Date();
System.out.println(d1);
System.out.println("--------------------------");
//日期 ->系统时间
long long1=d1.getTime();
System.out.println(long1);
System.out.println("test");
System.out.println(long1);
System.out.println("-----------------------------");
//系统时间
long long2=System.currentTimeMillis();
System.out.println(long2);
Date d2=new Date(long1);
Date d3=new Date(2008-1900,7,8,20,8,8); //*1 年份需-1900
Date d4=new Date(2008,7,8,20,8,8); //*2 月份需-1
System.out.println(d3);
System.out.println(d4);
System.out.println("--------------------------------");
//定制日期格式
SimpleDateFormat format1=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat format2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(format1.format(d3));
System.out.println(format2.format(long1));
System.out.println("-----------------------------------");
//日期->字符串
String str1=format2.format(d3);
System.out.println(str1);
System.out.println("------------------------------------");
//字符串->日期
try{
Date d5=format2.parse(str1);
System.out.println(d5);
}catch (ParseException e){
e.printStackTrace();
}
}
}
结果:
Thu Jul 19 15:28:48 CST 2018
--------------------------
1531985328859
test
1531985328859
-----------------------------
1531985328896
Fri Aug 08 20:08:08 CST 2008
Sat Aug 08 20:08:08 CST 3908
--------------------------------
2008-08-08
2018-07-19 15:28:48
-----------------------------------
2008-08-08 20:08:08
------------------------------------
Fri Aug 08 20:08:08 CST 2008
七、日历类 java.util.Calendar
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class NewCalendar {
public static void main(String[] args){
//获取抽象对象
Calendar c1=Calendar.getInstance();
System.out.println(c1);
System.out.println("---------------------");
//获取年月日
System.out.println(c1.get(Calendar.YEAR));
System.out.println(c1.get(Calendar.MONTH)); //输出月份比实际小1
System.out.println(c1.get(Calendar.DATE));
System.out.println("----------------------");
//设置年月日
c1.set(Calendar.YEAR,2000);
c1.set(Calendar.MONTH,7);
c1.set(1999,7,15);;
System.out.println(c1.get(Calendar.YEAR));
System.out.println(c1.get(Calendar.MONTH));
System.out.println(c1.get(Calendar.DATE));
System.out.println("--------------------------");
//日历计算
c1.add(Calendar.DAY_OF_MONTH,48);
c1.add(Calendar.MONTH,-2);
System.out.println(c1.get(Calendar.YEAR));
System.out.println(c1.get(Calendar.MONTH));
System.out.println(c1.get(Calendar.DATE));
System.out.println("----------------------------");
//日历 ->日期
Date d1=c1.getTime();
SimpleDateFormat format1=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
System.out.println(format1.format(d1));
System.out.println("------------------------------");
//日期 ->日历
c1.setTime(new Date());
System.out.println(c1);
System.out.println("------------------------------");
//月中天数的最大值
System.out.println(c1.get(Calendar.MONTH)+" "+c1.getMaximum(Calendar.DAY_OF_MONTH));
}
}
输出结果:
java.util.GregorianCalendar[time=1531987687491,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=19,DAY_OF_YEAR=200,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=8,SECOND=7,MILLISECOND=491,ZONE_OFFSET=28800000,DST_OFFSET=0]
---------------------
2018
6
19
----------------------
1999
7
15
--------------------------
1999
7
2
----------------------------
1999-08-02 04:08:07
------------------------------
java.util.GregorianCalendar[time=1531987687530,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=19,DAY_OF_YEAR=200,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=8,SECOND=7,MILLISECOND=530,ZONE_OFFSET=28800000,DST_OFFSET=0]
------------------------------
6 31
八、 jdk1.8新特性 --java.time.*类
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
public class JDK8_New {
public static void main(String[] args) {
//Clock时钟
Clock c1=Clock.systemDefaultZone();
long s1=c1.millis();//获取毫秒值
System.out.println(s1);
Date d1=Date.from(c1.instant());//时钟转为日期
System.out.println(d1);
System.out.println("-------------------------");
//Timezones 城市时区(Zoneld)
//共输出599个时区
Set set=ZoneId.getAvailableZoneIds();
Iterator it=set.iterator();
for(int i=1;it.hasNext();i++){
String s=it.next();
System.out.println(i+"--"+s+"--"+ZoneId.of(s).getRules());
}
System.out.println("----------------------------");
//LocalTime 本地时间
ZoneId zone1=ZoneId.of("Asia/Shanghai");//上海
ZoneId zone2=ZoneId.of("Asia/Hong_Kong");//香港
ZoneId zone3=ZoneId.of("Asia/Seoul");//首尔
LocalTime now1 = LocalTime.now(zone1);
LocalTime now2 = LocalTime.now(zone2);
LocalTime now3 = LocalTime.now(zone3);
System.out.println(now1.isBefore(now3)); // 之前false
System.out.println(now1.isAfter(now3)); // 之后
long hours = ChronoUnit.HOURS.between(now1, now2); //时间差-小时
long minutes = ChronoUnit.MINUTES.between(now3, now1);//时间差-分钟
System.out.println(hours);
System.out.println(minutes);
System.out.println("-----------------------------");
// LocalDate 本地日期
LocalDate today = LocalDate.now(); //今天
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); //明天
LocalDate yesterday = tomorrow.minusDays(2); //昨天
System.out.println(today+"--"+tomorrow+"--"+yesterday);
LocalDate day1 = LocalDate.of(2008,8,19);
System.out.println(day1);
System.out.println("-----------------------------");
// LocalDateTime 本地日期时间
LocalDateTime oy = LocalDateTime.of(2008,8,8,20,8,8);
System.out.println(oy);
System.out.println(oy.getDayOfMonth());
System.out.println(oy.getDayOfWeek());
System.out.println(oy.getDayOfYear());
System.out.println(oy.get(ChronoField.CLOCK_HOUR_OF_AMPM));
Instant instant = oy.atZone(ZoneId.systemDefault()).toInstant();
System.out.println("瞬间时间:"+instant);
Date d2 = Date.from(instant);
System.out.println("瞬间时间-->date:"+d2);
DateTimeFormatter format =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parsed = LocalDateTime.parse("2008-08-08 07:13:20", format);
System.out.println("本地日期时间格式化:"+parsed);
String string = format.format(parsed);
System.out.println("本地日期时间格式化的字符串:"+string);
}
}
输出结果:
1531989695995
Thu Jul 19 16:41:35 CST 2018
-------------------------
(省略)
----------------------------
true
false
0
-60
-----------------------------
2018-07-19--2018-07-20--2018-07-18
2008-08-19
-----------------------------
2008-08-08T20:08:08
8
FRIDAY
221
8
瞬间时间:2008-08-08T12:08:08Z
瞬间时间-->date:Fri Aug 08 20:08:08 CST 2008
本地日期时间格式化:2008-08-08T07:13:20
本地日期时间格式化的字符串:2008-08-08 07:13:20