集合理解之二---单列集合讲解

list特点一:

有序,可以重复的集合。
在这里插入图片描述
由于 List 接口是继承于 Collection 接口,所以基本的方法如上所示。

1、List 接口的三个典型实现:

①、List list1 = new ArrayList();

底层数据结构是数组,查询快,增删慢;线程不安全,效率高

②、List list2 = new Vector();

底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合

③、List list3 = new LinkedList();

底层数据结构是链表,查询慢,增删快;线程不安全,效率高

怎么记呢?我们可以想象:

数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要望某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快。
  链表就像手牵着手站成一圈的人,要找第10个人不容易,必须从第一个人一个个数过去。但插入、删除快。插入时只要解开两个人的手,并重新牵上新加进来的人的手就可以。删除一样的道理。

下面我们总结一下list集合的使用方法:

add();remove();removeAll();contains();isEmpty(); get()

ArrayList分析:

首先,具体详细了解的话,可以参考文章:
https://www.cnblogs.com/maoyali/p/8805975.html

主要的是看下面的这个文章:
https://www.cnblogs.com/ysocean/p/8622264.html

这里呢,我们摘取了比较有代表性的话术:

    1.ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,
实现了RandomAccess接口,支持快速随机访问,
实际上就是通过下标序号进行快速访问,实现了Cloneable接口,能被克隆。

     2.ArrayList的实现中大量地调用了Arrays.copyof()和System.arraycopy()方法。
我们有必要对这两个方法的实现做下深入的了解。

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

    4.ArrayList 和 HashSet 都是有数组实现的,但是ArrayList 有get方法,但是HashSet没有,
有的文章数是HashSet 无序,但是我理解的是,HashSet 地城是Map实现的,再加上hash算法,
就根本不需要get方法了;
    
    5.在Arraylist的属性中,有一个属性被关键字 transient  修饰了,既然用transient修饰,那就说明这个数组是不会被序列化的,那么同时我们发现了这两个集合都自定义了独自的序列化方式。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41509621/article/details/89061784
今日推荐