一、数组扩容
给出例子:
import java.util.Arrays;
public class T {
public static void main(String[] args)
{ m(); }
private static void m()
{
int [] data = {11,22,33,44,55,66};
//Arrays.copyOf(原数组,新数组的长度)实现数组的扩容
data = Arrays.copyOf(data, data.length*2);
System.out.println(Arrays.toString(data));
}
}
或者直接定义新的数组,定义长度时加长到自己需要的就行。
二、封装类Arrays的静态方法介绍
数组操作的时候Arrays类提供的方法很好用,这里就介绍它。
Static int[] copyOf(int[] original, int newLength) // 扩充长度
Static int[] copyOfRange(int[] original, int from, int to) //部分复制
Static String[] toString(int[] a) //数组元素转化字符串
Static String [] deepToString(Object[] a) //二维数组元素字符串输出
Static int[] fill(int[] a, int val) //完全填充
Static int[] fill(int[] a, int fromIndex , int toIndex , int val) //部分填充
Static int[] parallelSort(int[] a) //大数组时排序(由小到大)
Static int[] sort(int[] a) //小数组时排序(由小到大)
Static int[] binarySearch(int[] a, int key) //二分查找,前提是数组元素由小到大先排序
(补充)当然,对于数组的操作我们需要去熟悉Arrays工具类的使用,常见的方法:equals,toString,fill,sort,binarySearch(二分查找返回索引)。数组常见的异常就有数组角标越界,空指针异常。
看两个例子:
1.数组排序操作:
public class T {
public static void main(String[] args) {
int [] data = {6,3,5,9,13,2,15,1}; //静态初始化
//1)排序
Arrays.sort(data);
//2) 打印
System.out.println(Arrays.toString(data));
//3) 扩容
data = Arrays.copyOf(data, data.length*3);
System.out.println(Arrays.toString(data));
//4)填充
Arrays.fill(data, 6, 12, 666);
System.out.println(Arrays.toString(data));
//5)数组瘦身
data = Arrays.copyOf(data, data.length/3*2);
System.out.println(Arrays.toString(data));
//6) 二分查找,前提是数组是由小带大排序
System.out.println(Arrays.binarySearch(data, 5));
System.out.println(Arrays.binarySearch(data, 666));
System.out.println(Arrays.binarySearch(data, 7));
System.out.println(Arrays.binarySearch(data, 1));
}
}
2.对象数组排序(这个很实用)
import java.util.Arrays;
import java.util.Comparator;
/**
* 对象数组的排序案例
*/
public class T {
public static void main(String[] args) {
//定义数组保存Product产品对象
Product[] myproduct1 = new Product[5];
//赋值
myproduct1[0] = new Product("MacBookPro", 9800);
myproduct1[1] = new Product("Dell", 5800);
myproduct1[2] = new Product("Lenovo", 6800);
myproduct1[3] = new Product("ThinkPad", 8800);
myproduct1[4] = new Product("HuaWei", 7800);
//直接打印数组
System.out.println(Arrays.toString(myproduct1));
//对数组进行排序, 可以指定一个Comparator比较器
// Comparator是一个接口对象,后面<T>是一个泛型,指定比较元素的数据类型,采用匿名内部类
Arrays.sort(myproduct1, new Comparator<Product>() {
@Override // 重写Comparator的抽象方法,并指定比较规则
public int compare(Product o1, Product o2) {
//根据价格的升序排列
//如果是升序,第一个对象大于第二个对象,返回正数,反之则返回负数,相等返回0
//return o1.price - o2.price;
//根据价格的降序排列
return o2.price - o1.price;
}
});
System.out.println(Arrays.toString(myproduct1));
}
}
三、排序算法
这里只给出选择排序,冒泡排序在我java经典程序专栏里有,就不多提。
import java.util.Arrays;
/**
* 选择排序(由小到大/由大到小)
* 工作原理:首先在未排序序列中找到最小(大)元素,
* 存放到排序序列的起始位置,
* 再从剩余未排序元素中继续寻找最小(大)元素,
* 然后放到已排序序列的末尾。
* 以此类推,直到所有元素均排序完毕。
*/
public class T{
public static void main(String[] args) {
int[] data = {22, 45, 66, 13, 10, 98};
System.out.println(Arrays.toString(data));
System.out.println("-----------------------");
for (int i = 0; i < data.length; i++) {
int minIndex= i;
for (int j = minIndex + 1; j < data.length; j++) {
if (data[minIndex] > data[j]) {
// 由大到小排序 data[minIndex] < data[j]]
minIndex = j;
}}
int temp = data[i];
data[i] = data[minIndex];
data[minIndex] = temp;
System.out.println(Arrays.toString(data));
}
System.out.println("-----------------------");
System.out.println(Arrays.toString(data));
}
}
四、字符串基本方法
方法 length( ) 返回 String 的长度。
方法charAt(int index) 获得字符串指定位置的字符。
方法getChars(int srcBegin, int srcEnd, char[ ] dst, int dstBegin) 拷贝字符串的部分字符序列到指定的字符数组的指定位置。
将其它数据类型转换为字符串类型有结构:public static String valueOf( 数据类型),至于字符串类型转换为其他类型,在大板块里面提到,这里就不阐述了。
后记:
结束啦,如有误,评论指出,谢谢。