文章目录
Java_比较器
- Java实现对象排序的方式有两种:自然排序和定制排序
自然排序:java.lang.Comparable
Comparable
接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。- 实现
Comparable
的类必须实现compareTo(Object obj)
方法,两个对象即 通过compareTo(Object obj)
方法的返回值来比较大小。 - 如果当前对象
this
大于形参对象obj
,则返回正整数,如果当前对象this
小于形参对象obj
,则返回负整数,如果当前对象this
等于形参对象obj
,则返回零。 - 实现
Comparable
接口的对象列表(和数组)可以通过Collections.sort
或Arrays.sort
进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。 - 对于类 C 的每一个
e1 和 e2
实例来说,当且仅当e1.compareTo(e2) == 0 与 e1.equals(e2)
具有相同的boolean
值时,类 C 的自然排序才叫做与equals
一致。建议(虽然不是必需的)最好使自然排序与equals
一致。
Comparable的实现
Comparable
的典型实现:(默认都是从小到大排列的)- String:按照字符串中字符的Unicode值进行比较
Character
:按照字符的Unicode值来进行比较- 数值类型对应的包装类以及
BigInteger、BigDecimal
:按照它们对应的数值大小进行比较 Boolean:true
对应的包装类实例大于false
对应的包装类实例Date、Time
等:后面的日期时间比前面的日期时间大
package Java_9;
import java.util.Arrays;
public class Comparable {
public static void main(String[] args) {
String [] all = new String[4];
all[0] = "《红楼梦》";
all[1] = "《西游记》";
all[2] = "《三国演义》";
all[3] = "《水浒传》";
Arrays.sort(all);
System.out.println(Arrays.toString(all));
}
定制排序java.util.Comparator
- 当元素的类型没有实现
java.lang.Comparable
接口而又不方便修改代码,
或者实现了java.lang.Comparable
接口的排序规则不适合当前的操作,那
么可以考虑使用Comparator
的对象来排序, java.util.Comparator
强行对多个对象进行整体排序的比较。- 重写
compare(Object o1,Object o2)
方法,比较o1和o2的大小
:如果方法返 回正整数,则表示o1大于o2
;如果返回0,表示相等
;返回负整数,表示o1小于o2。
- 可以将
Comparator
传递给sort
方法(如 Collections.sort 或 Arrays.sort),
从而允许在排序顺序上实现精确控制。 - 还可以使用
Comparator
来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象collection
提供排序。
Java_常用包
- java.lang包 - 该包是Java语言的核心包,并且该包中的所有内容由Java虚拟机自动导入。如:System类、String类、
- java.util包 - 该包是Java语言的工具包,里面提供了大量工具类以及集合类等。如:Scanner类、Random类、List集合、…
- java.io包 - 该包是Java语言中的输入输出包,里面提供了大量读写文件相关的类等。如:FileInputStream类、FileOutputStream类、…
- java.net包 - 该包是Java语言中的网络包,里面提供了大量网络编程相关的类等。如:ServerSocket类、Socket类、…
- java.sql 包 - 该包是Java语言中的数据包,里面提供了大量操作数据库的类和接口等。如:DriverManager类、Connection接口、…
Java_System类
System类
代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang
包。System类
的构造器是private
的,所以无法创建该类的对象,也就是无法实
例化该类。System类
内部的成员变量和成员方法都是static
的,所以也可以很方便的进行调用。System类
成员变量:System类
内部包含in、out和err
三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)
。System类
成员方法native long currentTimeMillis()
:该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。System类
的void exit(int status)
:该方法的作用是退出程序。其中status
的值为0代表正常退出,非零代表
异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。System类
的void gc():
该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。String getProperty(String key)
:该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
Java_ Object类
基本概念
- java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间接子类
- 如果定义一个Java类时没有使用extends关键字声明其父类,则其父类为 java.lang.Object 类,例如:
public class Person
等价于:public class Person extends Object
- Object类定义了“对象”的基本行为,如对象可以进行比较,对象可以克隆,对象可以通知等,Object类默认被子类继承
常用方法
方法声明 | 功能介绍 |
---|---|
Object() | 使用无参方式构造对象 |
boolean equals(Objectobj) | 用于判断调用对象是否与参数对象相等。该方法默认比较两个对象的地址是否相等,与 == 运算符的结果一致若希望比较两个对象的内容,则需要重写该方法。若该方法被重写后,则应该重写hashCode方法来保证结果的一致性。 |
int hashCode() | 用于获取调用对象的哈希码值(内存地址的编号)。若两个对象调用equals方法相等,则各自调用该方法的结果必须相同若两个调用对象equals方法不相等,则各自调用该方法的结果应该不相同,为了使得该方法与equals方法保持一致,需要重写该方法。 |
String toString() | 用于获取调用对象的字符串形式,该方法默认返回的字符串为:包名.类名@哈希码值的十六进制为了返回更有意义的数据,需要重写该方法使用print或println打印引用或字符串拼接引用都会自动调用该方法 |
Class<?> getClass() | 用于返回调用对象执行时的Class实例,反射机制使用 |
equals()方法
- 对称性:如果
x.equals(y)
返回是“true”
,那么y.equals(x)
也应该返回是“true”
。 - 自反性:
x.equals(x)
必须返回是“true”
- 传递性:如果
x.equals(y)
返回是“true”
,而且y.equals(z)
返回是“true”
,那么z.equals(x)
也应该返回是“true”
。 - 一致性:如果
x.equals(y)
返回是“true”
,只要x和y内容一直不变,不管你重复x.equals(y)
多少次,返回都是“true”
。 - 任何情况下,
x.equals(null)
,永远返回是“false”
;x.equals
(和x不同类型的对象)永远返回是“false”
。
hashCode方法
hashCode
方法用于返回对象的哈希码。- 通过比较哈希码可以标识唯一值
public class Test {
public static void main(String args[]) {
String Str = new String("www.nowcoder.com");
System.out.println("字符串的哈希码为 :" + Str.hashCode() );
}
}
toString方法
toString
方法用于返回以一个字符串表示的Number
对象值。- 如果方法使用了原生的数据类型作为参数,返回原生数据类型的 String 对象值。
- 如果方法有两个参数, 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。
toString()
: 返回表示Integer
值的String
对象。toString(int i):
返回表示指定int
的String
对象。- 基本类型数据转换为String类型时,调用了对应包装类的toString()方法
int a=10; System.out.println(“a=”+a)
public class Test{
public static void main(String args[]){
Integer x = 5;
System.out.println(x.toString());
System.out.println(Integer.toString(12));
Date now=new Date();
System.out.println(“now=”+now); // 相当于
System.out.println(“now=”+now.toString());
// 如String 类重写了toString()方法,返回字符串的值。
s1=“hello”;
System.out.println(s1);//相当于System.out.println(s1.toString());
}
}
getClass方法
getClass()
方法返回运行时类的对象。getClass()
方法返回一个Class类型的对象,表示运行时对象的类。
import java.util.GregorianCalendar;
public class ObjectDemo {
public static void main(String[] args) {
// 创建一个Object类
GregorianCalendar cal = new GregorianCalendar();
// 输出运行时间
System.out.println("" + cal.getTime());
// 输出运行运行时cal的类
System.out.println("" + cal.getClass());
// 创建一个Integer 的数据累心
Integer i = new Integer(5);
// 输出 i
System.out.println("" + i);
// 输出 i 所属得到类 即 Integer
System.out.println("" + i.getClass());
}
}
==操作符和equals的区别
==操作符
-
==
比较基本类型:只要两个变量的值相等,即为true
。int a=5; if(a==6){…}
-
==
比较基引用类型:(是否指向同一个对象):只有指向同一个对象时(比较内存地址),==
才返回true
。Person p1=new Person(); Person p2=new Person(); if (p1==p2){…}
-
用
“==”
进行比较时,符号两边的数据类型必须兼容
(可自动转换的基本数据类型除外),否则编译出错
equals方法
equals()
:所有类都继承了Object,也就获得了equals()
方法,如果该方法没有被重写过默认也是==
;equals()
:只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
- 特例:当用
equals()
方法进行比较时,对类File、String、Date及包装类(Wrapper Class)
来说,是比较类型及内容而不考虑引用的是否是同一个对象;原因是:在File、String、Date及包装类(Wrapper Class)
类中重写了Object类的equals()
方法。 - 当自定义使用
equals()
时,可以重写。用于比较两个对象的“内容”是否都相等
Java_Object的finilize
- Java提供了一种在对象即将被销毁时执行资源释放的方法。在Java中创建对象,但是不能销毁对象。
- JVM运行一个称为垃圾收集器的低优先级特殊任务来销毁不再引用的所有对象
- Object类有一个finalize()方法就是用于在对象被销毁之前执行清理代码,声明如下:
protected void finalize() throws Throwable { }
- Object类中的
finalize()
方法不会做任何事情。所以需要覆盖类中的finalize()方法。
- 类的
finalize()
方法将在类的对象销毁之前由垃圾回收器调用。
class Finalize {
private int x;
public Finalize(int x) {
this.x = x;
}
public void finalize() {
System.out.println("Finalizing " + this.x);
}
}
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
Finalize f= new Finalize(i);
f.finalize();// 可显示的调用
}
}
}
Java_包装类
包装类的概念
- 通常情况下基本数据类型的变量不是对象,为了满足万物皆对象的理念就需要对基本数据类型的变量进行打包封装处理变成对象,而负责将这些变量声明为成员变量进行对象化处理的相关类,叫做包装类
- 包装类有了类的特点,就可以调用类中的方法,Java才是真正的面向对象
包装类的分类
包装类 | 对应的基本类型 |
---|---|
java.lang.Byte | byte |
java.lang.Short | short |
java.lang.Integer | int |
java.lang.Long | long |
java.lang.Float | float |
java.lang.Double | double |
java.lang.Boolean | boolean |
java.lang.Character | char |
包装类(Wrapper)的使用
- 基本数据类型转换为对应包装类的方式:调用包装类的构造方法或静态方法即可
- 获取包装类对象中基本数据类型变量数值的方式:调用包装类中的xxxValue方法即可
- 字符串转换为基本数据类型的方式:调用包装类中的parseXxx方法即可
装箱和拆箱的概念
- 在Java5发布之前使用包装类对象进行运算时,需要较为繁琐的“拆箱”和“装箱”操作;即运算前先将包装类对象拆分为基本类型数据,运算后再将结果封装成包装类对象。
- 装箱:包装类使得一个基本数据类型的数据变成了类。有了类的特点,可以调用类中的方法。
- 装箱通过包装类的构造器实现:
int i = 500; Integer t = new Integer(i);
- 装箱:通过字符串参数构造包装类对象:
Float f = new Float(“4.56”);long l = new Long(“asdf”); //NumberFormatException
- 拆箱:调用包装类的
.xxxValue()方法:boolean b = bObj.booleanValue();
- 装箱通过包装类的构造器实现:
- 从Java5开始增加了自动拆箱和自动装箱的功能,但类型必须匹配
自动装箱池
- 在Integer类的内部提供了自动装箱池技术,将-128到127之间的整数已经装箱完毕,当程序中使用该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率。
// 装箱实例
String s = t.toString(); // s = “500“,t是类,有toString方法
String s1 = Integer.toString(314); // s1= “314“ 将数字转换成字符串。
String s2=“4.56”;
double ds=Double.parseDouble(s2); //将字符串转换成数字
// 拆箱:将数字包装类中内容变为基本数据类型
int j = t.intValue(); // j = 500,intValue取出包装类中的数据
// 包装类在实际开发中用的最多的在于字符串变为基本数据类型。
String str1 = "30" ;
String str2 = "30.3" ;
int x = Integer.parseInt(str1) ; // 将字符串变为int型
float f = Float.parseFloat(str2) ; // 将字符串变为int型
Java_Integer类
基本概念
- java.lang.Integer类内部包装了一个int类型的变量作为成员变量,主要用于实现对int类型的包装并提供int类型到String类之间的转换等方法。
常用常量
常量类型和名称 | 功能介绍 |
---|---|
public static final int MAX_VALUE | 表示int类型可以描述的最大值,即2^31-1 |
public static final int MIN_VALUE | 表示int类型可以描述的最小值,即-2^31 |
public static final int SIZE | 表示int类型采用二进制补码形式的位数 |
public static final int BYTES | 表示int类型所占的字节个数 |
public static final Class TYPE | 表示int类型的Class实例 |
常用的方法
方法声明 | 功能介绍 |
---|---|
Integer(int value) | 根据参数指定的整数来构造对象(已过时) |
Integer(String s) | 根据参数指定的字符串来构造对象 (已过时) |
int intValue() | 获取调用对象中的整数值并返回 |
static Integer valueOf(int i) | 根据参数指定整数值得到Integer类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static int parseInt(String s) | 将字符串类型转换为int类型并返回 |
static String toString(int i) | 获取参数指定整数的十进制字符串形式 |
static String toBinaryString(int i) | 获取参数指定整数的二进制字符串形式 |
static String toHexString(int i) | 获取参数指定整数的十六进制字符串形式 |
static String toOctalString(int i) | 获取参数指定整数的八进制字符串形式 |
Java_Double类
基本概念
- java.lang.Double类型内部包装了一个double类型的变量作为成员变量,主要用于实现对double类型的包装并提供double类型到String类之间的转换等方法。
常用的常量
常量类型和名称 | 功能介绍 |
---|---|
public static final int SIZE | 表示double类型的二进制位数 |
public static final int BYTES | 表示double类型的字节个数 |
public static final Class TYPE | 表示double类型的Class实例 |
常用的方法
- java.lang.Number类是个抽象类,是上述类的父类来描述所有类共有的成员。
方法声明 | 功能介绍 |
---|---|
Double(double value) | 根据参数指定的浮点数据来构造对象(已过时) |
Double(String s) | 根据参数指定的字符串来构造对象 (已过时) |
double doubleValue() | 获取调用对象中的浮点数据并返回 |
static Double valueOf(double d) | 根据参数指定浮点数据得到Double类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static double parseDouble(String s) | 将字符串类型转换为double类型并返回 |
boolean isNaN() | 判断调用对象的数值是否为非数字 |
Java_Boolean类
基本概念
- java.lang.Boolean类型内部包装了一个boolean类型的变量作为成员变量,主要用于实现对boolean类型的包装并提供boolean类型到String类之间的转换等方法。
常用的常量
常量类型和名称 | 功能介绍 |
---|---|
public static final Boolean FALSE | 对应基值为false的对象 |
public static final Boolean TRUE | 对应基值为true的对象 |
public static final Class TYPE | 表示boolean类型的Class实例 |
常用的方法
方法声明 | 功能介绍 |
---|---|
Boolean(boolean value) | 根据参数指定的布尔数值来构造对象(已过时) |
Boolean(String s) | 根据参数指定的字符串来构造对象 (已过时) |
boolean booleanValue() | 获取调用对象中的布尔数值并返回 |
static Boolean valueOf(boolean b) | 根据参数指定布尔数值得到Boolean类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static boolean parseBoolean(String s) | 将字符串类型转换为boolean类型并返回 |
Java_Character类
基本概念
- java.lang.Character类型内部包装了一个char类型的变量作为成员变量,主要用于实现对char类型的包装并提供字符类别的判断和转换等方法。
常用的常量
常量类型和名称 | 功能介绍 |
---|---|
public static final int SIZE | 表示char类型的二进制位数 |
public static final int BYTES | 表示char类型的字节个数 |
public static final Class TYPE | 表示char类型的Class实例 |
常用的方法
方法声明 | 功能介绍 |
---|---|
Character(char value) | 根据参数指定的字符数据来构造对象(已过时) |
char charValue() | 获取调用对象中的字符数据并返回 |
static Character valueOf(char c) | 根据参数指定字符数据得到Character类型对象 |
boolean equals(Object obj) | 比较调用对象与参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static boolean isUpperCase(char ch) | 判断参数指定字符是否为大写字符 |
static boolean isLowerCase(char ch) | 判断参数指定字符是否为小写字符 |
static boolean isDigit(char ch) | 判断参数指定字符是否为数字字符 |
static char toUpperCase(char ch) | 将参数指定的字符转换为大写字符 |
static char toLowerCase(char ch) | 将参数指定的字符转换为小写字符 |
字符串转换成基本数据类型:
- 通过包装类的构造器实现:
int i = new Integer(“12”)
- 通过包装类的
parseXxx(String s)
静态方法Float f = Float.parseFloat(“12.1”);
基本数据类型转换成字符串
- 调用字符串重载的valueOf()方法:
String fstr = String.valueOf(2.34f);
- 自动转换:
String intStr = 5 + ""
Java_数学处理类
Math类的概述
- java.lang.Math类主要用于提供执行数学运算的方法,如:对数,平方根。
- 常用的方法
方法声明 | 功能介绍 |
---|---|
static int max(int a, int b) | 返回两个参数中的最大值 |
static int min(int a, int b) | 返回两个参数中的最小值 |
static double pow(double a, double b) | 返回第一个参数的幂 |
static int abs(int a) | 返回参数指定数值的绝对值 |
static long round(double a) | 返回参数四舍五入的结果 |
static double sqrt(double a) | 返回参数的平方根 |
static double random() | 返回0.0到1.0的随机数 |
BigDecimal类
-
由于float类型和double类型在运算时可能会有误差,若希望实现精确运算则借java.math.BigDecimal类型加以描述。
-
BigDecimal
类支持不可变的、任意精度的有符号十进制定点数。 -
常用的方法
方法声明 功能介绍 BigDecimal(String val) 根据参数指定的字符串来构造对象 BigDecimal add(BigDecimal augend) 用于实现加法运算 BigDecimal subtract(BigDecimal subtrahend) 用于实现减法运算 BigDecimal multiply(BigDecimal multiplicand) 用于实现乘法运算 BigDecimal divide(BigDecimal divisor) 用于实现除法运算 BigInteger bi = new BigInteger("12433241123"); BigDecimal bd = new BigDecimal("12435.351"); BigDecimal bd2 = new BigDecimal("11"); System.out.println(bi); // System.out.println(bd.divide(bd2)); System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP)); System.out.println(bd.divide(bd2, 15, BigDecimal.ROUND_HALF_UP));
BigInteger类 -
若希望表示比long类型范围还大的整数数据,则需要借助java.math.BigInteger类型描述。
-
java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本整数操作符的对应物
-
常用的方法
方法声明 | 功能介绍 |
---|---|
BigInteger(String val) | 根据参数指定的字符串来构造对象 |
BigInteger add(BigInteger val) | 用于实现加法运算 |
BigInteger subtract(BigInteger val) | 用于实现减法运算 |
BigInteger multiply(BigInteger val) | 用于实现乘法运算 |
BigInteger divide(BigInteger val) | 用于实现除法运算 |
BigInteger remainder(BigInteger val) | 用于实现取余运算 |
BigInteger[] divideAndRemainder(BigInteger val) | 用于实现取商和余数的运算 |