集合框架之List讲解

在实际开发当中List用到的很多,在面试中也经常遇到,之前去CCTV大厦附近的一公司去面试,问的最多的还是集合框架。今天小白详细记录List的部分知识。其实集合框架你只要记得下面的这张图就很容易理解了。


上面的这些都是接口,其中Set接口有下面有HashSet,有接口SortedSet,SortedSet有实现类TreeSet。List下面有最常用的实现类ArrayList和LinkedList。Map下面有SortedMap这个子接口还有最常用的实现类HashMap。大概结构就是这样了。

List下面有两个实现类,ArrayList和LinkedList。

ArrayList看名字就是一个数组集合。很快就能想得到其底层就是一个Array,因为集合框架实现的是对Object 的操作,所以在Arraylist上的操作是对Object的操作这点毋庸置疑。当你看api和源码的时候你就会发现ArrayList的底层其实维护的是一个长度为10的数组,这是在new ArrayList()的时候默认生成的。当你的容量不够用的时候会进行扩容,数组有一个arraycopy的方法对数组进行复制,在添加的容量不够的时候进行扩容,扩容的规则是当前数组长度的(1.5倍+1),为什么是1.5而不是2倍啊,3倍啊,我觉得这是一个经验值,也是为了节省空间。但是当你看api的时候你会发现ArrayList的构造方法有三个其中有一个是new ArrayList(int length)也就是说我们可以自定义ArrayList的长度。

LinkedList虽然和ArrayList的用法差不多,但是其底层实现完全不一样,LinkedList的底层实现是一个双向链表,查看源码会看到其实LinkedList的实现是维护了一个Entry对象,在Entry对象内部包含一个前驱,一个后继,还有就是需要添加的对象,

表面上:

LinkedList linkedlist = new LinkedList();

linkedlist.add(“AAA”);

底层实现原理:

Entry{

Entry previous;

Object element;

Entry next;

}

Entry entry = new Entry();

entry.element=”AAA”;

list.add(entry);

上面就很清楚的看到LinkedList的实现原理。

实现对于List的遍历,我们可以使用for循环,但我们可以使用迭代器实现,为什么List和Set里面都可以使用迭代器呢?原因就在

API中Collection的定义:

·         public interface Collection<E>  extends Iterable<E>
List
·         public interface List<E> extends Collection<E>
这就很容易理解List的迭代了。

至于List中最常用也最常被容易问道的就是上面的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值