版权声明: https://blog.csdn.net/qq_40794602/article/details/87070948
数组的二分查找:
public static int getIndex(int[] arr, int find) {
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while (find != arr[mid]) {
if (find < arr[mid]) {
max = mid - 1;
} else {
min = mid + 1;
}
mid = (min + max) / 2;
if (min > max) {
return -1;
}
}
return mid;
}
Arrays类概述:
- 针对数组进行操作的工具类。
- 提供的方法都是通过类方法调用,因为构造方法被私有了
- 提供了排序,查找等功能。
- 查看API文档
- EG:
import java.util.Arrays; public class J2 { public static void main(String[] args) { int[] arr1 = {28,12,38,11,10}; //1.toString方法->把数组转成固定格式的字符串 System.out.println(Arrays.toString(arr1)); //2.sort 排序 Arrays.sort(arr1); System.out.println(Arrays.toString(arr1)); //3.binarySearch 二分法检索(binary search)又称折半检索 //二分查找(binary search)又称折半查找 //如果找不到元素,都用负数表示,表示你这个数应该插入的位置 int index = Arrays.binarySearch(arr1, 30); System.out.println(index); } }
基本数据类型包装类的概述:
为什么会有基本类型包装类:
- 将基本数据类型封装成对象,这样的好处在于可以在对象中定义更多方法操作该数据;
- 包装类常用操作就是用于基本数据类型与字符串之间的转换。
基本类型对应的包装类:
- byte Byte
- short Short
- int Integer [先学习这个,其它的后面用到再讲]
- long Long
- float Float
- double Double
- char Character
- boolean Boolean
EG:
public static void main(String[] args) {
int a = 100;//请把a转成字符串类型
//String s = (String)a;
//1.构造方法
/*Integer(int value)
构造一个新分配的 Integer 对象,它表示指定的 int 值。*/
Integer integer = new Integer(a);
String s = integer.toString();
System.out.println("s:" + s);
//2.Integer的静态属性
System.out.println("int最小值:" + Integer.MIN_VALUE);
System.out.println("int最大值:" + Integer.MAX_VALUE);
//3.Integer的其它方法
//把int转成2进制的字符串
System.out.println(Integer.toBinaryString(8));//8的二进制1000
//把int转成8进制的字符串
System.out.println(Integer.toOctalString(9));//9的8进制是11
//把int转成16进制的字符串
System.out.println(Integer.toHexString(17));//17的16进制11
}
String和int类型的相互转换:
public static void main(String[] args) {
//String和int类型的相互转换
// 一、int 转 String
int a = 120;
// 1.1和""进行拼接
String s1 = a + "";
// 1.2public static String valueOf(int i) (String类方法)
String s2 = String.valueOf(a);
// 1.3int -- Integer -- String(Integer类的toString方法())
Integer integer = new Integer(a);
String s3 = integer.toString();
// 1.4public static String toString(int i)(Integer类的方法)
String s4 = Integer.toString(a);
System.out.println("s1:" + s1);
System.out.println("s2:" + s2);
System.out.println("s3:" + s3);
System.out.println("s4:" + s4);
// 二、String 转 int
String str = "520";
// String -- Integer – int
Integer int1 = new Integer(str);
int b = int1.intValue();
// public static int parseInt(String s) [常用]
int c = Integer.parseInt(str);
System.out.println("b:" + b);
System.out.println("c:" + c);
}
JDK5的新特性:
- 自动装箱:把基本类型转换为包装类类型
- 自动拆箱:把包装类类型转换为基本类型
- EG:
public static void main(String[] args) { // 1.自动装箱:把基本类型转换为包装类类型 /*int a = 10; Integer i = new Integer(a);*/ Integer i1 = 10;//内部会自动new Integer(10) System.out.println("i1:" + i1); // 2.自动拆箱:把包装类类型转换为基本类型 Integer i2 = new Integer(120); int a = i2;//内部会调用i2.intValue() }
装箱拆箱面试题:
/**
* 考点Integer内部装箱的实现
*
*/
public static void main(String[] args) {
//看程序写结果
Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);//false
System.out.println(i1.equals(i2));//true
System.out.println("-----------");
Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("-----------");
Integer i5 = -127;//自动装箱
Integer i6 = -127;
/**
* 自动装箱,如果值一样,地址也一样
* 自动装箱,范围在-128 ~ 127 【256个数】的地址一样,其它范围地址不一样
* 因为内部有个Integer的缓冲池
*/
System.out.println(i5 == i6);//true
System.out.println(i5.equals(i6));//true
System.out.println("-----------");
Integer i7 = -129;
Integer i8 = -129;
System.out.println(i7 == i8);//false
System.out.println(i7.equals(i8));//true
}
Math类概述和方法使用:
- Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
- EG:
public static void main(String[] args) { // Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 // 成员方法(更多方法需要自己查看API) // 1.public static int abs(int a) 取绝对值 System.out.println(Math.abs(-110)); // 2.public static double ceil(double a) //向上(往大数)取整 System.out.println(Math.ceil(3.14)); System.out.println(Math.ceil(-3.14)); // public static double floor(double a) // 向下(往小数)取整 System.out.println(Math.floor(3.14)); System.out.println(Math.floor(-3.14)); // public static int max(int a,int b) 取最大值, min方法自学 System.out.println(Math.max(-3, -5)); // public static double pow(double a,double b) a^b a的b次方 System.out.println(Math.pow(4, 2)); // public static double random() 生成0~0.99999的随机数 System.out.println(Math.random()); // public static int round(float a) 四舍五入取整数。 System.out.println(Math.round(3.46)); // public static double sqrt(double a) 值的正平方根 System.out.println(Math.sqrt(4)); }
Random类的概述和方法使用:
- Random类的概述:此类用于产生随机数;如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
- 构造方法:1. public Random();2. public Random(long seed)
- 成员方法:1. public int nextInt();2. public int nextInt(int bound)(重点掌握)
public static void main(String[] args) {
Random r1 = new Random(10000);//相同种子
Random r2 = new Random(10000);
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
System.out.println("==============");
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
System.out.println("==============");
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
}
System类的概述和方法使用:
- System 类包含一些有用的类字段和方法。它不能被实例化。
- public static void gc()
- public static void exit(int status)
- public static long currentTimeMillis()
- pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)