容器:是将多个数据存储到一起,每个数据成为该容器的元素。
数组:数组是存储长度固定的容器,保证多个数据的类型要一致。
数组的格式
1、数组存储的数据类型[] 数组名= new 数组存储的数据类型[长度]
String[] lang1=new String[8];
2、数组存储的数据类型[] 数组名= new 数组存储的数据类型[]{元素1,元素2,……}
int[] lang2=new int[]{1,2,3,4};
3、数组存储的数据类型[] 数组名= {元素1,元素2,……}
double[] lang2={1.2,2.6,3.9,};
数组的访问:
索引:每一个存储到数组的元素,都会有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
格式:数组名[索引编号]
数组长度:每个数组都有长度,而且是固定的,java中赋予了数组一个属性,可以获取到数组的长度.
语句为:数组名.length,属性length的执行结果是数组的长度,int类型的结果,
所以,数组索引编号为数组名.length-1
示例1:通过定义一个列表,将数组遍历的结果放进列表里,最后打印列表
package array;import java.util.ArrayList;import java.util.Arrays;public class ArrayIndex {public static void main(String[] args) {System.out.println(array1());array2();System.out.println(array3());}public static ArrayList<Integer> array1() {int[] lang1 = new int[5]; //数组定义方式一lang1[0] = 2;lang1[1] = 3;lang1[2] = 4;lang1[3] = 5;lang1[4] = 6;ArrayList<Integer> list = new ArrayList<>(); //定义一个list列表for (int i = 0; i < lang1.length; i++) {list.add(lang1[i]);}return list;}public static void array2() { //定义无返回值类型的方法,所以不用returndouble[] lang2 = {1.2, 2.3, 3.4, 4.5}; //数组定义方式二System.out.println(Arrays.toString(lang2)); //Arrays类中的toString方法。Arrays类位于java.util包下}public static ArrayList<String> array3() {String[] lang3 = new String[]{"wang", "xiao", "lang", "sha", "zi"};ArrayList<String> list = new ArrayList<>();//数组定义方式三for (int i = 0; i < lang3.length; i++) { //通过for循环,遍历数组中的元素String b = lang3[i];list.add(b);}return list;}}
输出结果:
示例2:将数组作为方法参数,直接定义数组并传值,调用方法
package array;public class Array_1 {public static void main(String[] args){int[] array1={1,5,4,3,2};lang1(array1);}public static void lang1(int[] array1){ //将数组作为方法参数for (int i = 0; i <array1.length ; i++) {System.out.println(array1[i]);}}}
数组内存图:
public class arrayindex1 {public static void main(String[] args) {int[] array1 = new int[4];System.out.println(array1); //输出结果为[I@50cbc42f}}
以上方法的输出是数组在内存中的地址,new出来的内容,都是在堆内存中存储的,而方法中array1保存的是数组的地址,只有输出array1[索引编号]。才会输出数组中对应的元素。
数组在内存中的存储:
程序的执行流程:
1、main方法进入方法栈执行
2、创建数组,JVM会在堆内存中开辟空间,存储数组
3、数组在内存中会有自己的内存地址,以十六进制数表示
4、数组中有4个元素,默认是0
5、JVM将数组的内存地址赋值给引用类型array1
6、变量array1保存的是数组内存中的地址,而不是一个具体的数值,因此是引用数据类型
数组的常见操作:
1、数组越界异常
public class ArrayIndex {public static void main(String[] args) {int[] langlang=new int[3]{1,2,3,4,5};System.out.println(langlang[6]); //数组长度为3,但输出数组中第7个元素,所以抛出ArrayIndexOutOfBoundsException异常}}
2、数据空指针异常
public class ArrayIndex {public static void main(String[] args) {int[] langlang=new int[]{1,2,3,4,5};langlang = null;System.out.println(langlang[2]); //变量langlang不会再保存数组的内存地址,不允许再操作数组,抛出NullPointerException异常}}
3、数组获取最大元素:
public class ArrayIndex {public static void main(String[] args) {int[] lang = {1, 3, 5, 6, 8, 2, 1, 5};int max = lang[0];for (int i = 0; i < lang.length; i++) {if (lang[i] > max) {max = lang[i];}}System.out.println(max);}}
ArrayList类
定义
java.util.ArrayList是大小可变的数组的实现,存储在内的数据成为元素。此类提供一些方法和操作内部存储的元素。
ArrayList中可不断添加元素,其大小也自动增长。
java.util.ArrayList :该类需要 import导入使后使用。
ArrayList
示例:
ArrayList<String>,ArrayList<Student>
ArrayList构造方法:
ArrayList<String> list = new ArrayList<String>(); //定义一个ArrayList构造方法
使用实例:
package array;import java.util.ArrayList;public class ArrayListStudents {public static void main(String[] args) {ArrayList<String> list = new ArrayList();String student01="张三";String student02="李四";String student03="王五";list.add(student01); //往list里添加定义好的数据list.add(student02);list.add(student03);System.out.println(list);}}
ArrayList 常用方法和遍历
示例:
package array;import java.util.ArrayList;public class ArrayListStudents {public static void main(String[] args) {ArrayList<String> list = new ArrayList(); //创建对象//往list里新增数据list.add("lang");list.add("yong");list.add("ling");//输出结果System.out.println(list);System.out.println("----------");//返回集合中元素的个数System.out.println("size:" + list.size());//list里删除数据System.out.println("remove:" + list.remove(0));//循环遍历输出for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}}
ArrayList如何存储基本数据类型
1、 ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似
解决方法:基本数据类型转换为对应的包装类型。
| 基本类型 | 基本类型包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
转化为基本类型包装类示例(Integer):
package array;import java.util.ArrayList;public class ArrayListStudents {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList(); //创建对象,并将基本数据类型转换为基本类型的包装类//往list里新增数据list.add(1);list.add(2);list.add(3);//输出结果System.out.println(list);System.out.println("----------");}}
练习: 生成6个1~99之间的随机整数,添加到集合,并遍历
package array;import java.util.ArrayList;import java.util.Random;public class ArrayListTest {public static void main(String[] args) {ArrayList<Integer> listtest = new ArrayList();Random random = new Random(); //生成一个随机数对象for (int i = 0; i < 6; i++) {int R = random.nextInt(99) + 1; //随机生成1~99的数listtest.add(R); //将生成的随机数放进列表}for (int j = 0; j < listtest.size(); j++) { //循环遍历输出System.out.println(listtest.get(j));}}}
结果:
