美文网首页
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