Java笔记之List<E>和ArrayList<E>

通过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的时候就有可能需要修改很多的代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值