Java基础知识点(常用类、集合)

一、常用类

1.比较器

Comparator 和Comparable 比较:
1.Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
(作用在实体类上)

2.而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
(作用在排序类上)

总结:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

2.内部类

1.成员内部类
定义在类中,充当类的一个成员。
访问权限:内部类可以访问外部类的属性和方法,外部类想要访问内部类的成员必须先创建内部类的对象来访问。
创建对象:new Outer().new Inner()

2.局部内部类
定义在方法中,充当方法的一个变量,注意: 局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。

3.匿名内部类
匿名内部类,通常作为方法传参时使用,用于继承抽象类或实现接口,代替子类或实现类,并不需要额外定义方法。Jdk8开始可以使用Lambda表达式进行简化。

4.静态内部类
静态内部类可以理解为类的一个静态成员。
静态内部类不需要依赖于外部类的对象,可以直接创建自己的对象。
不能访问外部类的非static成员属性或方法,因为静态内部类不依赖外部对象,就可以自己创建对象,所以如果没有外部对象,就调用外部的实例成员,就产生了矛盾,因为外部的实例成员必须要有外部对象。

3.包装类

包装类的概念:
由于基本数据类型没有类和对象的概念,java的设计理念是万事万物皆对象。
所以特定为每一种基本数据类型量身定制了一个属于自己的类,称为包装类。

2.包装类的应用
由于集合中不能存储基本数据类型,我们所看到的 list.add(6);事实上存储的都是包装类型,由基本数据类型升级成包装类的过程叫做“装箱”,反之称为“拆箱”;
1.装箱—拆箱 包装类 –基本数据类型 自动进行
2.向上转型—向下转型 父类—子类
3.强制类型转换—自动转换 byte-short-int-long float-double

扫描二维码关注公众号,回复: 12929444 查看本文章

3.包装类的构造方法
1.所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例

2.除Character类外,其他包装类可将一个字符串作为参数构造它们的实例

注意事项
1.Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false

2.当Number包装类(除了Character和Boolean其它的包装类)构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常

总结:
1.包装类的构造方法一般都有重载,一个构造方法的参数是对应的基本数据类型,另一个构造方法的参数是字符串类型。

4.包装类的常用方法
1.XXXValue():包装类转换成基本类型(实例方法)
byteValue()、intValue()、longValue()、shortValue()、doubleValue()、floatValue()
charValue()、booleanValue()

2.toString():以字符串形式返回包装对象表示的基本类型数据(基本类型->字符串)
(静态方法)
3. parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)(静态方法)

4.valueOf()(静态方法)
(1)所有包装类都有如下方法(基本类型->包装类)
public static Type valueOf(type value)
(2)除Character类外,其他包装类都有如下方法(字符串->包装类)
public static Type valueOf(String s)

4.String常用方法:

1.长度length();

2.拼接 str.concat(str2);

3.格式化:
//方式一
System.out.printf(“大家好,我的名字叫:%s,我今年:%d岁了,我的存款有:%f %n”,“曹操”,36,999.99);

//方式二
String s = String.format(“大家好,我的名字叫:%s,我今年:%d岁了,我的存款有:%f”,“曹操”,36,999.99);
System.out.println(s);

4.charAt(index)返回指定索引处的字符

5.indexOf(str)返回指定字符串在此字符串中第一次出现处的索引

6.compareTo(str2)比较两个字符串

7.equals()和equalsIgnoreCase()

8.getBytes()使用默认字符集将字符串变为字节数组,IO流中会用到

9.toCharArray() 字符串转换为字符数组

10.截取:subString()

11.转换成大小写toLowerCase() toUpperCase()

12.截取前后空白 trim()

13.替换:replace()

14.分割:split()

15.正则匹配 matches(String reg) 返回boolean

5.正则

1.概念:
正则表达式,又称规则表达式。(英语:Regular Expression,常简写为regex)。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。支持正则表达式的有:PHP、Java、Python、JavaScript等。有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的。

2.规则:

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。

  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。

  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。

  4. 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。

  5. .表示匹配任意的字符。

  6. \d表示数字。

  7. \D表示非数字。

  8. \w表示字母、数字、下划线,[a-zA-Z0-9_]。

  9. \W表示不是由字母、数字、下划线组成。

  10. [\u4e00-\u9fa5]匹配汉字

  11. ?: 表示出现0次或1次。

  12. +表示出现1次或多次。

  13. *表示出现0次、1次或多次。

  14. {n}表示出现n次。

  15. {n,m}表示出现n~m次。

  16. {n,}表示出现n次或n次以上。

3.用法:
//要匹配的字符
String str = “8”;
//正则表达式
String regex = “[0-9]”;
// 方式一
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
System.out.println(m.matches());
//方式二
System.out.println(Pattern.matches(regex, str));
//方式三
System.out.println(str.matches(regex));

扩展:断言,预测,排除
//某网站要求注册的账号只能是:字母和数字,不能都是字母,不能都是数字,且要求字母开头,长度在6-12之间,
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//断言 ,预测 (?!正则 ) 排除 正则匹配的情况
String s="";
while (!s.matches("1(?![a-zA-Z]{5,11}$)[a-zA-Z0-9]{5,11}")){
System.out.println(“请输入注册账号:”);
s = sc.next();
}
System.out.println(“注册成功!”);
}

6.StringBuffer和StringBuild

1.区别:
StringBuffer更加安全
StringBuilder更快

继承结构图:
在这里插入图片描述

2.相同
StringBuffer和StringBuilder用法一样

3.常用方法
//1.追加
append()

//2.插入
insert()

//3.倒置
reverse()

7.Math和Random

1.Math常用方法
向上/下取整,四舍五入 ceil() floor() round()

绝对值 abs()

随机数 random() 范围:[0,1) 小数

幂函数 pow(a,b)

sqrt()平方根

2.Random常用方法
在这里插入图片描述

在这里插入图片描述

8.日期类

1.Date

1、创建一个当前时间的Date对象
//创建一个代表系统当前日期的Date对象
Date d = new Date();

2、创建一个我们指定的时间的Date对象:
使用带参数的构造方法Date(int year, int month, int day) ,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。

//创建一个代表2014年6月12号的Date对象
Date d1 = new Date(2014-1900, 6-1, 12); (注意参数的设置)

3、正确获得一个date对象所包含的信息,如:
Date d2 = new Date(2014-1900, 6-1, 12);
//获得年份 (注意年份要加上1900,这样才是日期对象d2所代表的年份)
int year = d2.getYear() + 1900;
//获得月份 (注意月份要加1,这样才是日期对象d2所代表的月份)
int month = d2.getMonth() + 1;
//获得日期
int date = d2.getDate();
//获得小时
int hour = d2.getHours();//不设置默认为0
//获得分钟
int minute = d2.getMinutes();
//获得秒
int second = d2.getSeconds();
//获得星期
int day = d2.getDay();
构造方法中不加数据默认为当前时间。

2.Calendar

1.Calendar类的功能要比Date类强大很多,考虑了时区等问题。

2.Calendar类是一个抽象类,提供了getInstance方法用来创建对象。

//1.创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期

//2.创建一个指定日期的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2014, 5 - 1, 9);

//3.创建一个指定日期的Calendar对象–方式二
c1.set(Calendar.DATE,10);
c1.set(Calendar.YEAR,2015);

//4.获取时间

// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;(MONTH+1)
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几
int day = c1.get(Calendar.DAY_OF_WEEK);

//5.和Date关联

setTime(new Date())

3.SimpleDateFormat

//1.创建格式化对象
SimpleDateFormat f = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

//2.调用format或parse方法,可以进行String和Date之间的转换

9.数字类

1.BigDecimal

常用方法:

//BigDecimal对象中的值相加,返回BigDecimal对象
add(BigDecimal)

//BigDecimal对象中的值相减,返回BigDecimal对象
subtract(BigDecimal)

//BigDecimal对象中的值相乘,返回BigDecimal对象
multiply(BigDecimal)

//BigDecimal对象中的值相除,返回BigDecimal对象
divide(BigDecimal)

BigDecimal b1 = new BigDecimal(“0.03”);
BigDecimal b2 = new BigDecimal(“0.02”);
System.out.println(b1.subtract(b2));

//对比输出结果
BigDecimal b1 = new BigDecimal(0.03);
BigDecimal b2 = new BigDecimal(0.02);
System.out.println(b1.subtract(b2));

2.Biginteger
如果操作一个整数已经超过了long的范围,此时可以使用BigInteger。由于不是基本数据类型,所以不能使用±*/,操作方法和上面一致。

long l=999999999999999999l;

BigInteger in1=new
BigInteger(“999999999999999999999999999999999999999999”);

BigInteger in2=new
BigInteger(“999999999999999999999999999999999999999998”);

System.out.println(in1.subtract(in2));

十进制和二进制之间的转换

BigInteger in = new BigInteger(“10001110”,2);

System.out.println(in.intValue());//二进制转换为10进制

System.out.println(in.toString(2));//十进制转换为

System.out.println(in.toString(3));

3.DecimalFormat
double pi = 3.1415927;//圆周率
//取一位整数
System.out.println(new DecimalFormat(“0”).format(pi));//3

//取一位整数和两位小数
System.out.println(new DecimalFormat(“0.00”).format(pi));//3.14

//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat(“00.000”).format(pi));// 03.142

//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi));//3

//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%

long c =299792458;//光速

//显示为科学计数法,并取五位小数
System.out.println(new DecimalFormat("#.#####E0").format©);//2.99792E8

//显示为两位整数的科学计数法,并取四位小数
System.out.println(new DecimalFormat(“00.####E0”).format©);//29.9792E7

//每三位以逗号进行分隔。
System.out.println(new DecimalFormat(",###").format©);//299,792,458

//将格式嵌入文本
System.out.println(new DecimalFormat(“光速大小为每秒,###米。”).format©);

二、集合框架

1.容器:

变量

数组特点:类型固定,长度固定

类的特点:不同类型的成员属性,共同描述一个实体类

集合特点:类型不固定,长度也不固定,随意存放任何数据

2.认识集合框架的继承结构:

在这里插入图片描述

3.ArrayList

集合没有固定长度:
在这里插入图片描述

常用方法

在这里插入图片描述
在这里插入图片描述

4.LinkedList

存储原理是一个链表,在元素的前后分别有一个前置结点和后置结点,用于连接集合中的上一个元素和下一个元素,依次“手拉手”,构成一条链式数据的集合。

特有的方法
在这里插入图片描述

5.两个List集合的对比

1.List 接口存储一组不唯一(可以重复),有序(插入顺序)的对象

2.ArrayList实现了长度可变的Object类型数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高

3.LinkedList采用链表存储方式,插入、删除元素时效率比较高

4.通过查看添加方法的源码,比较二者结构的区别。链式存储和数组存储

在这里插入图片描述

效率不同的原因:
Linkedlist在执行删除和添加操作时,只会对相邻的两个元素有影响,

Arraylist由于它的本质是一个数组,在执行删除和添加操作时,后面所有的元素的地址值都将出现移位。

6.Set集合

1.Se接口特点:

存储一组唯一(不允许出现重复的元素),无序(没有index下标)的对象,HashSet是Set接口常用的实现类。

2.操作Set集合的数据

(1)新增元素

(2)删除元素

3.遍历Set集合
1.增强for呢
2.迭代器(跟while循环是固定搭配)

7.Map集合

1.Map接口专门处理键值映射的数据,可以根据键实现对值的操作

2.创建Map接口的常用实现类HashMap对象,存入数据

3.删除数据

4.修改数据

5.遍历map集合的数据:

1.遍历所有的键
2.遍历所有的值
3.遍历所有的键值对

常用方法总结:

在这里插入图片描述

总结

以上就是常用类和集合的全部知识点内容,主要是常用类和集合的相关概念和使用方法。


  1. a-zA-Z ↩︎

猜你喜欢

转载自blog.csdn.net/StruggleBamboo/article/details/111699351