Arrays类的概述和方法使用
-包含操作数组(比如排序和查询)的各种方法,使用时需导包-->java.util.Arrays;
-工具类构造方法私有,防止其他类创建对象,可以类名.方法来调用此类中的方法
-方法:
*public static int binarySearch(int[] arr,int key);二分查找
*public static String toString(int[] arr);将数组转换为字符串格式
*public static void sort(int[] arr); 排序,默认升序
public static void main(String[] args) {
int[] arr = {11,22,45,23,65,99,87};
Arrays.sort(arr); //将数组升序排序
System.out.println(Arrays.toString(arr)); //将数组转换为字符串
System.out.println(Arrays.binarySearch(arr, 87)); //二分查找数组中值为87的索引
System.out.println(Arrays.binarySearch(arr, 100)); //数组中不存在100,返回-->(-(插入位置)-1)
}
-方法解析:
*toString方法----
public static String toString(int[] a) {
if (a == null) //当传入数组为null时,返回null
return "null";
int iMax = a.length - 1; //获取数组的最大索引位
if (iMax == -1) //若数组元素为空,返回"[]"
return "[]";
StringBuilder b = new StringBuilder(); //创建StringBuider对象,线程不安全,效率高
b.append('['); //将"["添加到字符串缓冲区
for (int i = 0; ; i++) { //遍历数组,判断语句没写默认为true
b.append(a[i]); //将索引位的元素添加到缓冲区
if (i == iMax) //如果索引到到达最大索引,将"]"添加到缓冲区
return b.append(']').toString(); //返回缓冲区中的字符串
b.append(", "); //若未到达最大索引,将", "添加到缓冲区
}
}
*binarSearch方法----
public static int binarySearch(int[] a, int key) {
return binarySearch0(a, 0, a.length, key);
}
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
int low = fromIndex; //最小索引0
int high = toIndex - 1; //最大索引arr.length-1
while (low <= high) { //最小索引小于等于最大索引可以循环判断
int mid = (low + high) >>> 1; //获取中间位置的索引
int midVal = a[mid]; //将索引位所对应的值赋值给midval
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
51.基本类型包装类
-为什么要有:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
-常用的操作:用于基本数据类型和字符串之间的转换
-基本类型和包装类的对应:
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
52.Integer类
注:Integer类是不可变类,做参数传递时相当于String
-Integer类在对象中包装了一个基本类型int的值
-该类提供了多个方法,能在int和String类型之间相互转换
-提供了处理int类型时非常有用的一些变量和方法(MAX_VALUE,MIN_VALUR)
*构造方法:
*public Integer(int value);
*public Integer(String s); //构造一个integer对象,它表示String参数所代表的int值,s里面必须是int类型
*将Int数转换为String的方法:
public static void main(String[] args){
int i = 100;
String s1= i+"";
String s2= String.valueOf(i);
Integer t1 = new Integer(i);
String s3 = t1.toString();
String s4 = Integer.toString(i);
}
*将String转换为int的方法:
public class demo1 {
public static void main(String[] args){
String s = "100";
Integer i1 = new Integer(s);
int x1 = i1.intValue();
int x2 = Integer.parseInt(s);
}
}
*注:除了char没有,其他七种基本数据类型都有parseXxx方法,可以将String类型转换为对应的基本数据类型
53.JDK5的新特性
*自动装箱:把基本类型转换为包装类类型
*自动拆箱:把包装类类型转换为基本类型
public class demo1 {
public static void main(String[] args){
int i = 100;
Integer i1 = new Integer(i); //手动装箱
Integer i2 = 100; //自动装箱,将基本数据类型转换为对象
int i3 = i2 + 100; //自动拆箱,将对象转换为基本数据类型
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
}
}
*注:当integet x = null 时,代码就会出现NullPointerException,所以如果想要使用,应先判断integer对象是否为null,再使用
*-128~127是byte的取值范围,如果在这个范围,自动装箱就不会创建对象,而是从常量池获取,如果超过了byte取值范围就会再新创建对象