Java中的集合——ArrayList类和LinkedList类
那么今天我们就来认识一下 List 的另外两个子类
Arraylist 类和 LinkedList
ArrayList 是 List 的子类,list 又继承了 collection 类。所以很多和 list 类、 collection 类的方法是一样的就不在重复了~
咱们直接上干货~
我们上次说过 list 存储数据的特点是有序(存和取的顺序一致)有索引可以存储重复数据,ArrayList 是 List 的子类所以也有同样的特点~so我们先来说说ArrayList 的去重操作
需求:
ArrayList去除集合中字符串的重复值(字符串的内容相同)
思路分析:
1)创建新集合
2)根据传入的集合(老集合)获取迭代器
3)遍历老集合
4)通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
思路有了,下面我们来实现上面的想法
下面来验证一下我们的去重方法是否正确:
喏~我们成功了
下面挑战一个有难度的练习~
需求:
ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
思路和上面是一样的就不重复了
先来自定义一个对象类
注意事项:
需要重写 equals() 方法~
因为 contatins() 方法是依赖的是 equals() 方法进行判断的~
验证结果~
public void addFirst(E e) 及 addLast(E e)
addFirst()是从头向链表中添加元素
addLast()是从尾部添加元素
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
public E get(int index);
简单说一下数组与链表的结构~
数组:
我们可以把数组想象成枪上的弹夹,特点就是弹夹里还有几发子弹一目了然(查询快),发现里面有坏了的子弹想换掉就需要先卸掉上面的子弹才可以(增删慢)
链表:
我们可以把链表想象成由回形针组成的链子,特点就是想要向里面添加回形针特别的简单,(增删快),但是想要找到指定颜色的回形针需要一个一个检查(查询慢)~
有了上面的概念再来看一下
下面的内容~
(可能是面试题呦~)
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
(现在你明白 LinkedList 为什么有头和尾的区别了吧~)
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:
都是数组实现的
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:
都是线程不安全的
查询多的情况用ArrayList
增删多的情况用LinkedList
如果都多就用ArrayList
呼~今天的内容有点多
小伙伴们慢慢消化一下哈~