美文网首页
Java | 集合框架之ArrayList,LinkedList

Java | 集合框架之ArrayList,LinkedList

作者: Ada54 | 来源:发表于2018-12-06 17:33 被阅读0次

Java中,集合是存储对象最常用的一种方式

数组和集合类同为容器,有何不同?数组可以存储基本的数据类型,也可以储存对象,但长度固定;而集合的长度可动态改变,存储不同类型的对象。

一、集合框架

列出几个常用的接口和类

(1)Java集合框架主要两种容器:

         Collection(集合):存储元素集合

         Map(图):存储 key-value 键值对映射

这两种容器为集合框架的根接口,Java的集合类主要由这俩接口派生而出

(2)Collection接口派生出主要两个子接口:

         List 接口(列表) :元素存储有序,可存放重复元素

         Set 接口(集):元素存储无序,不可存放重复元素

(3)List 接口的实现类:

        ArrayList 类:动态数组结构;查询速度快,直接通过索引查找,插入,删除,修改比较慢;线程不安全

        LinkedList 类:链表结构;增删速度快,查询速度慢;线程不安全

        Set 接口的实现类:

        HashSet 类 :存取速度快;通过hashCode()方法、== 和 equals() 方法来保证元素的唯一性

        TreeSet 类:有序集合,对元素进行了排序;元素以二叉树的形式存放,通过Comparator.compareTo或者comparable.compare()方法来保证元素的唯一性

HashSet依赖于HashMap,TreeSet依赖于TreeMap,它们分别通过HashMap和TreeMap实现的。

(4)Map接口的实现类:

         HashMap 类:数组和链表的结合,查询速度快,查找对象时通过哈希函数计算其位置;key和value存在一一对应关系,不能存在相同的key值,value值可以相同;允许存放null键,null值

         TreeMap 类:有序的key-value集合,对键进行了排序,排序原理与TreeSet相同

二、常用集合类的特点分析

1、ArrayList 实现类

动态数组结构;查询速度快,直接通过索引查找,插入,删除,修改比较慢;线程不安全

(1)ArrayList 基本操作

  1)添加操作   

        boolean add(E e)   在列表的末尾顺序添加元素

        void add(int index, E element)   在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间

  2)查找操作

        E get(int index)   返回指定索引位置处的元素

  3)删除操作

        E remove(int index)   从列表中删除指定索引位置元素

        boolean remove(Object o)   从列表中删除元素

  4)返回元素个数操作

        int size()  返回列表中的元素个数

(2)遍历 ArrayList 实例

2、LinkedList 实现类

链表结构;增删速度快,查询速度慢;线程不安全

(1)LinkedList 常用操作

  LinkedList 的 add() ,get() 等基本操作与 ArrayList 相同,还添加了一些常用的操作

  1)void addFirst(E e)  在列表的首部添加元素

  2)void addLast(E e)  在列表的末尾添加元素

  3)E getFirst() 返回列表中的第一个元素

  4)E getLast() 返回列表中的最后一个元素

  5)E removeFirst() 删除并返回列表中的第一个元素

  6)E removeLast() 删除并返回列表中的最后一个元素

3、ArrayList 与 LinkedList 的对比

ArrayList 查询速度比 LinkedList 快,但是插入元素的速度就不如LinkedList 

例如 分别使用 ArrayList 和 LinkedList 添加元素,插入到第一个位置,分别计算出时耗进行对比

ArrayList 代码如下:

LinkedList 代码如下:

运行结果如下:

4、HashMap 实现类

三、总结

1、如果涉及到堆栈、队列等操作,应当考虑List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList

2、哈希表的操作,作为Key的对象要正确复写equals和hashCode方法

3、尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果将来要将ArrayList换成LinkedList时,客户端代码不用改变

4、List可以有类似数组的下标操作,且允许有相同的元素存在;Map是以键值对(KeyValue)的形式存在,不能存在相同的键

相关文章

网友评论

      本文标题:Java | 集合框架之ArrayList,LinkedList

      本文链接:https://www.haomeiwen.com/subject/mbrwcqtx.html