Java中的集合——ArrayList类和LinkedList类

那么今天我们就来认识一下 List 的另外两个子类 

Arraylist 类和 LinkedList


ArrayList 类


ArrayList 是 List 的子类,list 又继承了 collection 类。所以很多和 list 类、 collection 类的方法是一样的就不在重复了~


咱们直接上干货~


我们上次说过 list 存储数据的特点是有序(存和取的顺序一致)有索引可以存储重复数据,ArrayList 是 List 的子类所以也有同样的特点~so我们先来说说ArrayList 的去重操作


ArrayList去重

需求:

ArrayList去除集合中字符串的重复值(字符串的内容相同)


思路分析:

1)创建新集合

2)根据传入的集合(老集合)获取迭代器

3)遍历老集合

4)通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加


思路有了,下面我们来实现上面的想法


640?wx_fmt=png


下面来验证一下我们的去重方法是否正确:


640?wx_fmt=jpeg

喏~我们成功了

下面挑战一个有难度的练习~


去除ArrayList中重复自定义对象元素


需求:

ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)


思路和上面是一样的就不重复了


先来自定义一个对象类


640?wx_fmt=png


注意事项:

需要重写 equals() 方法~

因为 contatins() 方法是依赖的是 equals() 方法进行判断的~


640?wx_fmt=png


验证结果~


640?wx_fmt=png


LinkedList类


LinkedList类特有功能


public void addFirst(E e) 及 addLast(E e)

640?wx_fmt=jpeg

addFirst()是从头向链表中添加元素


640?wx_fmt=png

addLast()是从尾部添加元素


public E getFirst()及getLast()

640?wx_fmt=jpeg


public E removeFirst()及public E removeLast()

640?wx_fmt=jpeg


public E get(int index);

640?wx_fmt=png


数组和链表


简单说一下数组与链表的结构~

数组:

我们可以把数组想象成枪上的弹夹,特点就是弹夹里还有几发子弹一目了然(查询快),发现里面有坏了的子弹想换掉就需要先卸掉上面的子弹才可以(增删慢)


链表:

我们可以把链表想象成由回形针组成的链子,特点就是想要向里面添加回形针特别的简单,(增删快),但是想要找到指定颜色的回形针需要一个一个检查(查询慢)~


有了上面的概念再来看一下

下面的内容~

(可能是面试题呦~)


List的三个子类的特点

ArrayList:

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高。


LinkedList:

底层数据结构是链表,查询慢,增删快。

线程不安全,效率高。

(现在你明白 LinkedList 为什么有头和尾的区别了吧~)


Vector:

底层数据结构是数组,查询快,增删慢。

线程安全,效率低。

Vector相对ArrayList查询慢(线程安全的)

Vector相对LinkedList增删慢(数组结构)


Vector和ArrayList的区别

Vector是线程安全的,效率低

ArrayList是线程不安全的,效率高

共同点:

都是数组实现的


ArrayList和LinkedList的区别

ArrayList底层是数组结果,查询和修改快

LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢

共同点:

都是线程不安全的


List有三个子类,我们到底使用谁呢?

查询多的情况用ArrayList

增删多的情况用LinkedList

如果都多就用ArrayList


呼~今天的内容有点多

小伙伴们慢慢消化一下哈~


u1F4AA.0.png知识扩展

Java中的集合——list和Vector

Java中的集合——Collection类和迭代器

Java中的其它类