java模拟list_跟我学java编程—List接口实现类ArrayList

前面三节介绍了Set接口的实现类HashSet、LinkedHashSet、TreeSet的基本用法,Set集合接口提供了存储元素与Key的映射关系,可以通过Key去快速查找到对应的元素。从本节开始介绍List接口的实现类,List集合接口提供了元素的有序排列,List 接口的实现类在实现插入元素时,都会根据索引进行排列。由于 List 的元素在存储时互不干扰,没有什么依赖关系,因此List集合接口可以存储重复的元素,Set集合接口不允许存储重复的元素。

List集合接口除了继承Collection的接口方法外,还提供了关于元素查询、在指定位置添加元素等操作。下面分类列出予以说明。

1、List集合添加方法

● boolean add(int nIndex,Object o)

此方法在指定位置插入Object元素。

● boolean addAll(int nIndex,Collection c)

此方法在指定位置插入Collection的所有元素。这些元素按照迭代器 Iterator 返回的先后顺序进行插入。

2、List集合元素查询方法

● int indexOf (Object o)

此方法返回指定元素的第一个匹配项在当前集合中的索引,如果当前集合不包含该元素返回-1。

● int lastIndexOf (Object o)

此方法返回指定元素在当前集合中最后一次出现的位置索引,如果当前集合不包含该元素返回-1。

● Object get (int nIndex)

此方法根据下标查询当前集合中所存储的元素,并返回元素对象。

● boolean contains (Object o)

此方法查询当前集合中是否包含指定的元素,如果包含返回true,否则返回false。

● boolean isEmpty ()

此方法用于判断当前集合是否为空。

List集合接口最常用的两个实现类是ArrayList和LinkedList,这两个类的实现代表两种典型的数据结构,分别是线性表和链表。其中线性表是可以根据需要自动增长的。本节重点介绍ArrayList,LinkedList在下一节进行介绍。

可以把ArrayList看成一个动态数组,数组大小能够动态改变,并能动态增加和删除元素。

由于ArrayList基于数组实现,因此可以通过下标索引直接查找到指定位置的元素,其查找效率非常高,但每次插入或删除元素时,需要移动大量元素,因此插入删除元素的效率较低。

下面先通过一个应用实例对ArrayList的用法有个具体了解。

e7c462a00090aba980ff5a047bbc73ac.png

例子程序给出了ArrayList的基本用法,包括元素的增加、修改、删除以及遍历。遍历ArrayList时,需要使用迭代器Iterator,使用hasNext方法判断下一个游标位置是否存在元素,再用next方法获取集合的元素,需要将next方法返回的元素强制转换为需要接收的元素类型。

ArraryListTest输出结果如下图所示:

6520a3e9d7cb64f209c82f4fc3e2f8cb.png图 14-9 ArraryListTest输出结果

前面介绍了ArrayList存储String类的情况,如果是自定义类呢?下面的示例使用自定义的类作为ArrayList存储的元素,同样提供元素的增、删、改、查操作。

ArrayList存储自定义类的示例程序。

(1)新建一个自定义的Student类

992a423eae3653825d191e81d17e8314.png

(2)再建主方法调用类StudentTest类

97f74fefadc618abc6234d69c71a6015.png

该示例程序首先创建了Student类,然后在StudentTest类的mian方法中声明并实例化了ArrayList集合,该集合存储的元素类型是Student对象。遍历ArrayList集合采用了forearch语句,foreach语句在遍历数组等方面为程序员提供了很大的方便,其语法规则如下:

for(元素变量 x : 遍历对象obj){

引用了x的java语句

}

StudentTest输出结果如下图所示:

8d88a236abb13d609a483f1742ed85f3.png图 14-10 StudentTest输出结果

■ 知识点拨

每个实例化的ArrayList都有一个容量,该容量用来表示能够存储元素的个数,容量是动态变化的,随着向 ArrayList 中不断添加元素,其容量也会自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果能够预知所能存储的元素个数,可在构造 ArrayList 时指定其容量。


版权声明:本文为weixin_33103961原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。