API方法大全
java如何math中的方法求一个数的平方根立方根?
平方根:使用Math.sqrt()方法。
double num = 25.0;
double squareRoot = Math.sqrt(num);
System.out.println("平方根为:" + squareRoot);
立方根:使用Math.cbrt()方法。
double num = 27.0;
double cubeRoot = Math.cbrt(num);
System.out.println("立方根为:" + cubeRoot);
需要注意的是,Math类中的sqrt()和cbrt()方法都返回一个double类型的值,因此返回的结果可能是一个无限小数。如果需要得到一个精确的平方根或立方根,可以使用其他算法或库来进行计算。
通法:用Math.pow()方法。
在Java中,Math.pow()
方法的签名如下:
public static double pow(double a, double b)
这个方法用于计算参数a
的参数b
次方的结果。返回的是一个double
类型的值。需要注意的是,参数a
和b
都是double
类型,返回值也是double
类型。
如何对一个数进行取整操作?
工具:调用Math类中的方法
Math类中提供了三种与取整有关的方法:ceil(该方法表示向上取整)、floor(该方法表示向下取整)、round(该方法表示四舍五入)
如何调用?
直接通过math类进行调用代码示例如下:
public static void main(String[] args) {
double number = 5.5;
double rounded = Math.ceil(number);
System.out.println(rounded);//6.0
rounded = Math.floor(number);
System.out.println(rounded);//5.0
rounded = Math.round(number);
System.out.println(rounded);//6.0
rounded = Math.round(-5.5);
System.out.println(rounded);//-5.0
}
如何得出程序运行时间?
工具:System.currentTimeMillis()
System.currentTimeMillis() 是 Java 中 System
类的一个静态方法,它返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的当前时间的长整型(long)表示。这个方法没有参数。
其签名如下:
public static long currentTimeMillis()
要使用Java中的System类来获取程序运行时间,可以使用System.currentTimeMillis()
方法获取当前时间戳(以毫秒为单位),并在程序开始时记录下这个时间戳。然后在程序结束时再次调用这个方法,将两次时间戳相减,即可得到程序运行的时间。
以下是一个示例代码:
public class ProgramRunTime {
public static void main(String[] args) {
// 记录程序开始时间
long startTime = System.currentTimeMillis();
// 执行程序代码
// ...
// 记录程序结束时间
long endTime = System.currentTimeMillis();
// 计算程序运行时间
long runTime = endTime - startTime;
// 输出程序运行时间
System.out.println("程序运行时间:" + runTime + "毫秒");
}
}
如何进行基本数据类型数组(字符串数组也可以用)拷贝?
1.使用System.arraycopy()方法:
System.arraycopy() 方法的签名如下:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数说明:
-
src:源数组,要从中复制元素的数组。
-
srcPos:开始复制的源数组中的位置。
-
dest:目标数组,要将元素复制到的数组。
-
destPos:开始放置复制元素的目标数组中的位置。
-
length:要复制的元素数量。
这是最常用且最有效的方法,因为它在底层进行优化,并且可以处理任何类型的数组。以下是一个示例:
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = new int[originalArray.length];
System.arraycopy(originalArray, 0, copiedArray, 0, originalArray.length);
2.用clone()进行浅拷贝(不推荐)
对于对象数组,可以使用clone()方法。但需要注意的是,clone()方法创建的是浅拷贝。
String[] a = {"abc","def","ghi","jkl"};
String[] b = a.clone();
a[0] = "mno";
System.out.println(a[0]);//输出为mno!!!!
System.out.println(b[0]);//输出为abc!!!!
如何把对象进行拷贝?
浅拷贝与深拷贝细节
-
要重写object中的clone方法
-
要让JavaBean类实现cloneable接口
-
创建本体对象调用clone即可。
浅拷贝的局限性
浅拷贝的局限性在于除字符串以外的引用数据类型(字符串存在于串池中)例如数组的拷贝。本体中如果存在除字符串以外的引用数据类型,则拷贝出来的复制体并没有完全独立,仍然会因为本体中元素的改变而改变。
int[][]arr = {
{1,2,3},{4,5,6}};
int[][]brr = arr.clone();
System.out.println(arr);
System.out.println(brr);
arr[0][0] = 0;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(arr[i][j]+",");
}
}
System.out.println();
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(brr[i][j]+",");
}
}
上述代码控制台输出为:
[[I@2f4d3709 [[I@4e50df2e 0,2,3,4,5,6, 0,2,3,4,5,6,
深拷贝
调用第三方方法。
为什么要重写对象中的tostring方法?或者说如何获取对象的字符串表达形式?
途径:重写对象中的toString()方法
如果不重写,则对象中的tostring方法是继承父类object中的方法的,而父类中的tostring返回的字符串是对象的地址值,而我们想要的是对象中的内容,所以要重写。
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写 toString() 方法
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
如何判断两个对象(包括字符串)是否相等?
途径1:重写对象中的equals()方法
如果不重写,则调用父类中的equals()方法,而父类中的equals()方法使用==号来进行比较的,也就是只会比较对象的地址值是否相等。而我们要比较的是对象中的属性值是否相等,则我们要重写对象中的equals()方法。
//重写equals()方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;//要记得强转,因为此时的o是object类型的无法调用子类的属性
return age == person.age && objects.equals(name,person.name);
}
途径2:用objects中的equals方法
方法签名:
public static boolean equals(Object a, Object b)
方法源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));//到头来还是会调用a中重写的equals方法。
}
注意事项:
-
方法的底层会判断是a是否为null,如果为null,直接返回false
-
如果a不是null,那么就利用a再次调用equals方法,如果a是举例类的person类的就要重写person类中的equals方法。否则还是比较两个对象的地址值。
如果是字符串,String类已经重写了 equals 方法,比较两个字符串不能使用“ == ”,直接使用equals 。
如何用好BigInteger来获取整数
BigInteger 是一个可以表示任意精度的整数的类,它在 Java 中提供了大整数运算的支持。以下是使用 BigInteger 来获取数字的一些方法:
-
创建 BigInteger 对象: 您可以使用 BigInteger 类的构造函数来创建一个 BigInteger 对象。例如,如果您有一个 long 类型的数字,您可以使用 BigInteger.valueOf(long val) 方法将其转换为 BigInteger 对象。而且此方法有一个好处就是如果传递到数据在-16~16之间那么方法会返回已经创建好的对象,可以减少内存。
javaBigInteger bigInt = BigInteger.valueOf(12345);
-
从字符串获取数字: 如果您有一个表示数字的字符串,您可以使用 new BigInteger(String val) 构造函数来创建一个 BigInteger 对象。
javaString numberString = "12345";
BigInteger bigInt = new BigInteger(numberString);
如何用好BigInteger来进行数字运算
BigInteger的方法表
divideAndRemainder方法:
可以用数组的方式来接受divideAndRemainder返回的两个值,示例代码如下:
public static void main(String[] args) {
BigInteger dividend = new BigInteger("12345678901234567890");
BigInteger divisor = new BigInteger("9876543210987654321");
BigInteger[] result = dividend.divideAndRemainder(divisor);
System.out.println("商: " + result[0]);
System.out.println("余数: " + result[1]);
}
如何运用BigDecimal来进行小数进行可控精度操作
如何获得一个很大的小数
方法名 | 描述 |
---|---|
BigDecimal a = new BigDecimal(double val) | 创建一个具有给定double值的BigDecimal,不推荐会有精度丢失。 |
BigDecimal a = new BigDecimal(String val) | 创建一个具有给定字符串表示的BigDecimal。 |
BigDecimal a = new BigDecimal.valueOf(double val) | 创建一个具有给定double值的BigDecimal. |
如果数字不大没有超出double的范围,建议用:BigDecimal a = BigDecimal.valueOf(double val),而且此方法有一个好处就是如果传递到数据在0~10之间那么方法会返回已经创建好的对象,可以减少内存。 如果超出了double的范围则建议使用:BigDecimal a =BigDecimal(String val)
BigDecimal方法大全
方法中的除法:
如果调用倒数第二行的除法方法,如果遇到除不尽的情况,代码会报错,所以要用倒数第一行的方法但在此之前我们要了解一下Java中的舍入方式有哪些
Java里RoundingMode中的舍入方式、
注意:这里的舍入方式是针对要保留几位有效数字而言的,如果保留控制不到位,则等于没写。如果要保留3位有效数字,则会对小数点后4位进行舍入处理。示例代码如下:
public static void main(String[] args){
BigDecimal a = BigDecimal.valueOf(-1.25);
System.out.println(a.divide(new BigDecimal("2"),3,RoundingMode.HALF_UP));//-0.625,舍入等于没写
System.out.println(a.divide(new BigDecimal("2"),2,RoundingMode.HALF_UP));//-0.63
System.out.println(a.divide(new BigDecimal("2"),2,RoundingMode.HALF_DOWN));//-0.62
}