数组是存储同一种数据类型的容器。索引从零开始,最大索引为长度减一。
定义格式:
1. 数据类型 [] 数组名;(推荐使用)
2. 数据类型 数组名 [];
数组的特点
1.数组的长度是确定的,数组一旦创建,它的大小是不可以改变的。
2.数组中的元素必须是相同类型,不允许出现混合类型。
3.数组中的可以是任何数据类型,包括基本数据类型和引用数据类型。
4.数组没有被初始化则为null,数组如果没有被显式初始化,则会自动初始化。其中的值与数组元素类型的默认初始化值相同。
5.数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组的初始化
1.系统默认自动初始化
如: int [] arr = int[3]; ---->等同于 int [] arr = {0,0,0}
如果是引用数据类型则自动初始化为null。
2.显式初始化
如: int [] arr = {1,2,3};
int [] [] arr2 ={{1,2},{2 ,3}};
3.使用工具初始化
如:int [] arr3 = new int[3];
Arrays.fill(arr3,6);
Arrays.fill()方法只能填充一维基本类型数组。
数组的遍历:
public class ArrayTest {
public static void main(String[] args) {
int [] arr = new int[5];
System.out.println(Arrays.toString(arr));
//填充数组
Arrays.fill(arr,8);
//遍历数组
for (int num :arr){
System.out.println("加强for循环:"+num);
}
for(int i=0;i<arr.length;i++){
System.err.println("普通for循环:"+arr[i]);
}
System.out.println("Arrays工具类:"+Arrays.toString(arr));
}
}
java内存分析:
java.util.Arrays
Arrays类是一个非常有用的数组工具类,提供了很多的方法,检索,填充,排序,比较,toString()等。
常用方法:
Arrays.toString();//返回数组的字符串形式
Arrays.sort(); //为数组按升序排序
Arrays.sort(Object[] array, int from, int to);//对数组元素指定范围进行排序(排序范围是从元素下标为from,到下标为to-1的元素进行排序)
Arrays.fill();//对数组进行填充
Arrays.fill(Object[] array,int from,int to,Object object);//对数组的部分元素填充一个值,从起始位置到结束位置,取头不取尾
数组转List
int [] arr = {9,2,6,8};
//返回false,
System.out.println( Arrays.asList(arr).contains(8));
List<int []> ints = Arrays.asList(arr);
System.out.println(ints.size());//返回1,该list中只有一个数组对象
System.out.println(ints.contains(8)); //返回false
Integer [] arr2 = new Integer []{9,2,6,8};
//4 封装类Integer数组调用asList是把数组中的每个元素加到了list中
System.err.println(Arrays.asList(arr2).size());
System.err.println(Arrays.asList(arr2).contains(8));//true
再看一个例子
Integer[] a = {1,2,3,4};
int[] b = {1,2,3,4};
String[] str = {"a","s","d"};
List list1 = null;
List list2 = null;
List list3 = null;
list1 = Arrays.asList(a);
list2 = Arrays.asList(str);
list3 = Arrays.asList(b);
System.out.println("list1的大小:"+list1.size());
System.out.println("list2的大小:"+list2.size());
//注意,如果原数组的元素为基本数据类型,那么生成的list大小为1
System.out.println("list3的大小:"+list3.size());
System.out.println("--------原始数组的信息----------");
System.out.print("a的内容:");
for(int i= 0; i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("\n");
System.out.print("str的内容:");
for(int i= 0; i<str.length;i++)
{
System.out.print(str[i]+",");
}
System.out.print("\n");
System.out.println("--------生成的list的信息----------");
System.out.print("list1的内容:");
Iterator ite = list1.iterator();
while(ite.hasNext())
{
System.out.print((Integer)ite.next()+",");
}
System.out.print("\n");
System.out.println("list1的大小:"+list1.size());
System.out.print("list2的内容:");
Iterator ite1 = list2.iterator();
while(ite1.hasNext())
{
System.out.print(ite1.next().toString()+",");
}
System.out.print("\n");
System.out.println("list2的大小:"+list2.size());
list1.set(1,new Integer(23));
a[0] = new Integer(90);
System.out.println("--------修改后的信息----------");
System.out.print("a的内容:");
for(int i= 0; i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.print("\n");
System.out.print("list1的内容:");
Iterator ite2 = list1.iterator();
while(ite2.hasNext())
{
System.out.print((Integer)ite2.next()+",");
}
System.out.print("\n");
list1.add(new Integer(6));
System.out.println("------------------------");
System.out.println("list1的大小:"+list1.size());
System.out.println("------------------------");
list1.add(2,new Integer(9));
list1.remove(3);
结果截图:
当改变原数组中的元素时,会导致list对象中的相应元素发生改变;同样的,当生成的list对象中的元素做修改时,也会导致原来数组中相应的元素发生改变。