一、数组的优点、缺点
优点:① 缺点:①、②、③
二、代替数组的容器
三、数组初始化的三种方法
分清:普通聚合初始化和动态聚合初始化
四、与C++相比JAVA数组在方法中传递的优点
五、多维数组的创建
①、直接创建 ②、动态定义其他维的程度 ③、利用Arrays.deepToString()
六、利用Arrays.fill()测试数组
七、利用生成器填充数组
八、Arrays类的三种方法
①、arrayCopy() ②、fill() ③、equals()
九、数组的比较 comparable接口
十、数组的排序 Arrays.sort()方法
十一、数组的查找
回答:
1、优点:效率相对于容器非常快
缺点:1、数组的长度是固定的 2、无法自动装箱和自动拆箱(就是int与Integer无法互相装转换) 3、无法使用泛型数组
2、利用ArrayList()来代替数组
3、三种方法:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
private int[] data = new int[5];
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//聚合初始化 private int[] data = {1,3,5,7,9};
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//动态聚合初始化 private Integer[] data = new Integer[]{1,3,5,7,9};
解:聚合初始化和动态聚合初始化的区别
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public static void test(Integer[] data){ for(int i=0; i<data.length; ++i){ System.out.println(data[i]+""); } } public static void main(String[] args){ //test({1,3,5,7,9});运用聚合初始化是错误的 test(new Integer(1,3,5,7));//正确 }
4、java与c++
在c++中传递给方法的是数组的头指针,如果进行复杂的调用,容易发生内存泄漏的问题。
但是java有垃圾回收机制,可以很轻易的在方法中传递数组对象。
5、创建多维数组
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
private Integer[][] data = new Integer[5][5]();
动态定义多维数组
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
private Integer[][] data = new Integer[5][]; public static void main(String[] args){ //填充二维数组 for (int i=0; i<data.length; ++i){ data[i] = new Integer[5]; } }
使用Array.deepToString():作用将多维数组转化为String
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
private static Integer[][] mData ={{1,2,3,4,5},{6,7,8,9,10}}; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Arrays.deepToString(mData)); } //输出:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
6、利用Array.fill()测试数据:将一维数组全部填充为一个类型的数据
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
private static Integer[] mData =new Integer[5]; public static void main(String[] args) { // TODO Auto-generated method stub Arrays.fill(mData, 731); for(int i=0; i<mData.length; ++i){ System.out.print(mData[i]+" "); } }
7、生成器填充数组(策略模式)
步骤1、创建接口 2、继承接口创建生成器 3、调用生成器
①、
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public interface Generic<T> { T next(); }
②、
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class IntegerGeneric implements Generic<Integer>{ private Random random = new Random(); @Override public Integer next() { // TODO Auto-generated method stub return new Integer(random.nextInt(100)); } }
③、
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub test(new IntegerGeneric(), 10); } public static void test(Generic<?> generic,int size){ for (int i=0; i<size; ++i){ System.out.print(generic.next()+" "); } } }
8、Arrays类的方法的使用
arrayCopy():将一个数组的内容复制到另一个数组中。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组.(int不可与Integer进行转换)
equals():判定两个数组是否相同
equals(Object[] obj1,Object[] obj2);
9、数组的比较
步骤1、对象继承Comparable接口 重写 compareTo()方法
步骤2、当重写了该方法之后,就可以使用Arrays.sort()对数组进行排序
步骤3、当排序完成之后,就可以对该数组进行二分法查询Arrays.binarySearch();