ArrayList类位于java核心类库java.util包中,使用前需要先导包,ArrayList用于存储对象,不能存储基本类型,就像是一个长度可变的数组,内部是使用数组实现的,当数组快装满时会创建一个更大的数组,所以要预先估计好要装多少对象,构造ArrayList时可以指定数组大小,构造方法是ArrayList(int initialCapacity)。
ArrayList实现了List接口,List接口要求对添加的元素进行有序排列,并且可以根据索引访问元素,先添加的元素排在前面,和数组一样,下标从0开始。List接口可以添加重复元素和null值。
ArrayList常用的方法有:
add(Object e);//添加一个元素 remove(Object o);//移除指定元素 remove(int index);//移除指定位置上的元素 get(int index);//获取指定索引上的元素
介绍几种遍历方法:
使用Collection通用的Iterator接口遍历:
ArrayList<String> list=new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); //使用Iterator接口,iterator()这个方法会返回一个Iterator实例 Iterator<String> i=list.iterator(); while(i.hasNext()){//如果有下一个元素 String s=i.next();//next()返回元素并将索引指向下一个元素 System.out.println(s);//打印元素 //i.remove();删除当前元素 }
使用List接口特有的listIterator接口遍历,好处是允许向前访问:
ArrayList<String> list=new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); //使用ListIterator接口遍历 ListIterator<String> i=list.listIterator(); while(i.hasNext()){ String s=i.next(); System.out.println(s); } while(i.hasPrevious()){//判断是否有前一个元素 String s=i.previous();//访问前一个元素 System.out.println(s); }
使用for循环遍历,可以用普通for循环或者增强for,这里只演示普通for:
ArrayList<String> list=new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); //使用普通for循环遍历 for(int a=0;a<list.size();a++){ System.out.println(list.get(a)); }
是不是和数组很像?
ArrayList与数组的转换:
ArrayList与数组是可以互相转换的,例如ArrayList转数组:
ArrayList<String> list=new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); Object[] o=list.toArray();//转换成Object数组 String[] s=list.toArray(new String[0]);//转换成指定类型数组,括号里需要一个类型的实例,仅用来获取类型,所以数组大小随意
数组转List:
String[] s={"1","2","3"}; List list=Arrays.asList(s);