Java笔记之List和ArrayList,javalistarraylist
Java笔记之List和ArrayList,javalistarraylist
通过JAVA JDK1.6的描述:
java.util
Interface List<E>
All Superinterfaces:
Collection<E>, Iterable<E>
All Known Implementing Classes:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
List<E>是一个接口,而ArrayList<E>就是它得实现类:
java.util
Class ArrayList<E>
java.lang.Object
extended by java.util.AbstractCollection<E>
extended by java.util.AbstractList<E>
extended by java.util.ArrayList<E>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
Direct Known Subclasses:
AttributeList, RoleList, RoleUnresolvedList
其中<E>代表的是Element(元素)的意思。
List<E>接口是一个有序的集合,里面的元素可以是重复的。用户通过这个接口可以精确的控制集合中每个元素的插入等方法。用户也可以根据元素的索引值来搜索表中的元素。
其常用的方法有:
add(E e)
及add(int index, E element)
添加单个元素以及指定的索引位置添加元素
addAll(Collection<?
extends E> c)
及addAll(int index, Collection<?
extends E> c)
将指定集合中的元素插入到此列表当中
get(int index)
取得索引位置的元素
remove(int index)
移除索引位置的元素
set(int index, E element)
修改索引位置中的元素
ArrayList<E>如上所致,是一个实现了List<E>接口的类。除了实现了List接口的方法,ArrayList还提供了一些方法来操作数组的大小等。
比如它独有的一些方法:
clone()、trimToSize()
。
这里有个常见的细节:
List <String > lst = new ArrayList();
ArrayList<String> lst = new ArrayList();
这两个声明有什么区别呢?
为什么大多数人都是这样List<E> list = new ArrayList<E>();声明的呢?
这么写的好处是什么呢?
这样编写的代码编译时类型是List,运行时类型是ArrayList,而List接口的实现类不只有ArrayList一个,
用一个List类型的引用这是“面向接口编程”,好处有很多,尽量面向接口编程,这里只说一个这样写的好处:
以后我们会用到很多不是我们写的类,我们叫第三方类库,在类库里面很可能会返回一个这样的列表,
但是他未必会返给你一个ArrayList,没准是人家自己写的一个实现类都说不准,那么我们面向接口编程,
不需要了解是什么实现类,我们都把它们当List接收过来就好了,我们就当成List来用。提高程序的透明性,
让底层的实现对上层使用者封装。
也就是说,因为List是接口。代码依赖于抽象的好处是,代码可以方便替换。例如,代码List list = new ArrayList();下面通过list来操作集合。代码编写后发现集合使用的不准确,应该使用LinkedList,那么只要修改一行代码List list = new LinkedList();就可以,这行以后的代码不需要修改,因为List接口保证了调用的都是接口中的方法,而ArrayList与LinkedList都实现了List接口。而如果当时用ArrayList list = new ArrayList()这种形式的话,那么list访问到的就可能是ArrayList里独有的方法而非List接口中的方法。这样替换成LinkedList的时候就有可能需要修改很多的代码。
相关文章
- 暂无相关文章
用户点评