2018年4月16日JAVA
Java ArrayList总结
ArrayList也是我们集合中最最重要的一个实现类,也是我们必须要掌握的集合类。本文将对ArrayList做比较全面的总结,
一个是从概念上理解,第二个是ArrayList的使用,这里使用ArrayList基本上是结合泛型来讲解使用,因为实际运用也是结合泛型使用的。
一.ArrayList
ArrayList是动态数组,是Array的子类,也是List接口的实现类。具有数组特点,也有自身的特点。
(一)ArrayList可以动态改变大小,动态增,删元素
(二)实现了Collection和List接口,可以使用其中的方法
二.ArrayList常用的使用方法
(一)public intsize();
返回此列表中的元素数。
(二) public boolean isEmpty();
如果此列表中没有元素,则返回 true
(三)public boolean contains(Object o);
如果此列表中包含指定的元素,则返回 true
(四)public int indexOf(Object o)
返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
(五)public int lastIndexOf(Object o)
返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
(六)public Object[] toArray();
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
(七)public E get(int index);
返回此列表中指定位置上的元素
(八)public E set(int index, E element);
用指定的元素替代此列表中指定位置上的元素。返回值为以前位于该指定位置上的元素
(九)public boolean add(E element);
将指定的元素添加到此列表的尾部。添加成功返回true
(十)public void add(int index, E element)
将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。
(十一)public E remove(int index)
移除此列表中指定位置的元素,返回从列表中移除的元素
(十二)public boolean remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。如果列表不包含此元素,则列表不做改动。
(十三)public void clear()
移除此列表中的所有元素。此调用返回后,列表将为空
(十四)public boolean addAll(Collection c)
按照指定collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部
(十五)publicboolean addAll(int index, Collection c)
从指定的位置开始,将指定 collection中的所有元素插入到此列表中。
三.ArrayList增删改查
package com.xykj.arraylist; import java.util.ArrayList; import java.util.Iterator; public class MainClass { /** * ArrayList增删改查的操作 * */ public static void main(String[] args) { //实例化ArrayList,泛型是基本类型String,添加的数据只能是String,否者报错 ArrayListlist=new ArrayList<>(); //添加操作 list.add("123"); //list.add(12);//会报错 list.add("小明"); list.add("meizi"); list.add("shuaige"); //删除操作 list.remove(1);//以游标的方式,删除第二个数据“小明” list.remove("meizi");//以实际集合的内容,删除第三个数据“meizi” //数据修改 list.set(0, "222");//把第一个元素的内容改为“222”了 //显示集合内的数据 //集合剩下“222”、“shuaige”这两页元素了 //显示方法1: //System.out.println(list);//最简单的显示方法 //显示方法2: /*for (int i = 0; i iterator=list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
显示结果:
对ArrayList进行了增删改查的基本操作,其中添加和修改的方法基本是固定的,但是删除和查找的方法是比较多,本示例列举了所有的显示List方法,
其中第二个方法是java基础时经常用的,
第三个方法是一个特殊的for结构,叫foreach语句,这个语句没有显式的游标值,但是能遍历后面集合(数组)的所有元素,
第四个方法是java集合专门使用的方法,需要迭代器Iterator接口的使用,后面要加泛型(要接收的数据类型),使用hasNext方法判断下一个游标位置是否存在元素,再用next方法获取集合的元素。
值得说一下的是,删除很多个集合元素时,基本是用迭代器Iterator接口的remove方法来删除元素,其他办法都有可能导致程序崩溃。
使用自定义的数据类型作为泛型,同样是增删改查的操作实现,但是重点是删除操作。
1.先建一个自定义数据类User
-
package com.xykj.arraylist2; public class User { //为一个用户定义三个基本属性 String name=""; String sex=""; int age=0; //利用构造方法传递参数 public User(Stringname, Stringsex,intage) { super(); this.name =name; this.sex =sex; this.age =age; } //各个参数的get和set方法 public String getName() { returnname; } public void setName(String name) { this.name =name; } public String getSex() { returnsex; } public void setSex(String sex) { this.sex =sex; } public int getAge() { returnage; } public void setAge(intage) { this.age =age; } }
2.再建主方法调用类
-
importjava.util.ArrayList; importjava.util.Iterator; publicclass MainClass { /** * 本示例对泛型是自定义类的情况做增删改查 * * */ public static void main(String[] args) { // 这里存入集合的不是基本数据类型了,而是上面创建的User类的对象了 ArrayList list = newArrayList<>(); // 添加User类的对象10个 for (int i = 0; i < 10; i++) { list.add(new User("name" +i, "女", 10 + i)); } // 删除前面的五个User的对象 /*使用for循环删除 *for (int i = 0; i < 5; i++) { //虽然程序没有崩掉,但是得到的结果不对 *list.remove(i); }//得到结果:剩下name1、name3、name5、name7、name9 */ // 使用迭代器Iterator删除 Iterator iterator =list.iterator(); int num = 0; while (iterator.hasNext()) { iterator.next();//游标指向下一个,这个很重要,没有就报错 iterator.remove(); num++; if (num == 5) { // 删除前面0到4个,马上退出循环 break; } } //创建一个User对象 User meizi=new User("meizi","女",18); //改变集合里面第一个元素的值 list.set(0, meizi); //显示集合里面的元素的具体属性 // System.out.println(list);//直接打印出现的是类名和地址,不是我们想要的结果 for (User user : list) { System.out.println(user.getName()+"\t"+user.getSex()+"\t"+user.getAge()); } } }
运行结果:
本示例主要是泛型的扩展使用,这个在以后数据存储也是很常用的。
还有一个就是list列表的删除多个元素的方法,迭代器Iterator接口类的使用,这个也是重点要掌握的知识。
从上面两个例子,可以看到ArrayList在实际的应用的具体代码,要熟练掌握这两种存储方式。相关知识的储备也是要的。