java基础总结——数组

一,数组的定义

  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
  • 数组的元素可以是任何数据类型,包括基本类型和引用类型。
  • C和C++中的数组都可以分配在栈上面,而JAVA中的数组是只能分配在堆上面的,因为JAVA中的数组是引用类型。

数组的特点:
    1. 只能存储同一种数据类型的数据。
    2. 一旦初始化,长度固定。 
    3. 数组中的元素与元素之间的内存地址是连续的。
    
注意: Object类型的数组可以存储任意类型的数据。 
 

数组定义的几种形式

(1)int[] arr = new int[5];    5为数组的长度

(2)int[] arr = new int[]{3,5,1,7};

(3)int[] arr = {3,5,1,7};后面直接跟元素。

注释:数组的定义分为两步,第一部分声明即左半部分,int[ ]  arr 

第二部分使用new,new的作用在内存堆中创建一个容器实体,即真是存在的数组,然后将这个数组的引用赋值给数组变量arr。

二,数组数据的存储

当数组元素为引用型的数据时,这时数组中的所有元素都要实例化,即需要new对象。

案例分析一:


案例分析二:



java 中各个维度的数组模型


三,二维数组

例:


疑问: 为什么a.length = 3, a[0].length = 4?


四,数组的使用

1,数组循环foreach 循环

JDK 1.5 引进了一种新的循环类型,被称为 foreach 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

double[] myList = {1.9, 2.9, 3.4, 3.5}; // 打印所有数组元素

for (double element: myList) {

System.out.println(element); }

2,数组元素的反转

  • 直接数组元素对换
    String[] strings = { "ramer", "jelly", "bean", "cake" };
    System.out.println("\t" + Arrays.toString(strings));
    for (int start = 0, end = strings.length - 1; start < end; start++, end--) {
        String temp = strings[end];
        strings[end] = strings[start];
        strings[start] = temp;
    }
    System.out.println("\t" + Arrays.toString(strings));
}
  • 使用Collections和Arrays工具类(利用collections中的reverse方法,只适用于引用I型shuju
    String[] strings = { "ramer", "jelly", "bean", "cake" };
    System.out.println("\t" + Arrays.toString(strings));
    // 这种方式仅针对引用类型,对于基本类型如:
    // char[] cs = {'a','b','c','g','d'};
    // 应该定义或转换成对应的引用类型: 
    // Character[] cs = {'a','b','c','g','d'};
    Collections.reverse(Arrays.asList(strings));
    System.out.println("\t" + Arrays.toString(strings));
}

总结:: 使用Collections和Arrays工具类反转数组元素更简单,但是在原数组上操作时速度更快,并且占用最少的内存.

3,空数组和数组长度为0的数组的区别。

int[ ] arr1=null;            //arr1是一个数组类型的空引用,不指向任何对象;

int[ ]  arr2=new int[0];//声明并创建一数组对象(因为new对象了),但长度是0;

例如:

两者如果在一句代码中,则要先判断是否为空,否则可能会出现空指针异常。
eg:if (array == null || 0 == array.length) {...} // 这种写法正确,因为执行到 “0 == array.length”则说明数组不为空,不会产生空指针异常。
if (0 == array.length || array == null) {...} // 这种写法可能会产生空指针异常。

所以对于一个新定义的数组或者方法返回的数组,都要先判断是否为空,再判断长度是否为0,注意顺序。


五,Arrays工具类

 1,数组打印toString方法,二维数组打印使用deeptoString

[jva]  view plain  copy
  1. int[] intArray = { 12345 };  
  2. String intArrayString = Arrays.toString(intArray);  // 直接打印,则会打印出引用对象的Hash值  // [I@7150bd4d  
  3. System.out.println(intArray);  
  4. System.out.println(intArrayString);// [1, 2, 3, 4, 5]  
2,equals方法 使用Arrays.equals来比较1维数组是否相等。 (二维数组判断相等使用deepEquals)
System.out.println(Arrays.equals(names1, names2));
3,sort排序方法(这里实现的是升序排序)

4,fill为数组赋值,将数组的所有元素都赋值为指定的值

int[] array1 = new int[8];

    Arrays.fill(array1, 1);
    //[1, 1, 1, 1, 1, 1, 1, 1]
    System.out.printl
5, bi narySearch(二分查找数组中是否存在这个元素。)存在输出下标。不存在输出-1.

  1.     char[]  arr={'a','b','c','d','e'};  
  2.     int i = Arrays.binarySearch(arr, 'd');  
  3.     System.out.println(i);//结果是:3 

下面的方法是数组与集合之间的相互转化

6,alist方法,可以返回一个固定大小的List,(转成List之后。可以使用List的所有方法)

List<String> stringList = Arrays.asList("Welcome", "To", "Java","World!");
7,数组与ArrayList之间的相互转换(互转之后可以互相使用对方的方法)

  1. String[] stringArray = { "a""b""c""d""e" };  
  2. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  //将数组转化成了Arraylist
  3. String[] stringArr = new String[arrayList.size()];  
  4. arrayList.toArray(stringArr);  
  5. for (String s : stringArr)  
  6.     System.out.println(s);  
8,将数组转化成set(可以使用set的所有方法)

  1. Set<String> set = new HashSet<String>(Arrays.asList(stringArray));  
  2. //[d, e, b, c, a]  
  3. System.out.println(set);






猜你喜欢

转载自blog.csdn.net/abingr/article/details/80491115