• Java数据结构、list集合、ArrayList集合、LinkedList集合、Vector集合


    数据结构:

    数据存储的常用结构有:栈、队列、数组、链表、红黑树。

    栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作,简单的说,采用该结构的集合,对元素的存取有着前进后出、栈的入口和出口都是栈的顶端位置的特点。
    在这里插入图片描述
    队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。简单的说采用该结构的集合有先进先出、队列的入口和出口各占一侧的特点。
    在这里插入图片描述
    数组:有序的元素序列,数组是在内存中开辟的一段连续的空间,并在此空间存放元素,就像是一排出租屋,有100个房间,这几100个房间是有顺序编号的,通过编号就可以快速的找到元素,其特点:通过索引可快速找到元素,但是增删元素慢;(指定索引位置新增元素:需要创建一个新数组,将指定新元素存储在指定索引位置,在把原数组元素根据索引,复制到新的数组对应索引的位置)
    在这里插入图片描述
    链表:linked list,由一系列结点node组成,链表中每个元素称为结点,结点可以在运行时动态生成,每个结点包括两部分,一是存储数据元素的数据域,二是存储下一个结点地址的指针域,常说的链表有单向链表和双向链表,其单向链表特点:多个结点之间通过地址进行连接,查找元素慢,增删元素快(查找某个元素需要通过连接的结点依次向后查找指定元素,增加元素只需要修改连接下个元素的地址即可
    在这里插入图片描述
    红黑树:二叉树,binary tree,是每个结点不超过2的有序树,顶上的结点称为根节点,两边的结点称为左子树和右子树,其特点:查询速度非常快。
    在这里插入图片描述
    list集合 :

    import java.util.ArrayList;
    import java.util.List;
    
    // List集合继承了Collection接口,具有以下特点:存和取元素是有序的、有索引且包含了带索引的方法,允许存储重复的元素
    public class ListClass {
        public static void main(String[] args) {
            // 创建一个list集合:并使用它特有的方法:
            List<String> list = new ArrayList<String>();
    
            // 1.add()向集合中添加元素:add方法传入一个参数时表示给list末尾追加元素;当有两个参数时,参数1表示要追加元素的索引位置,参数二表示追加的元素
            list.add("a");
            list.add("a");
            list.add("bc");
            System.out.println(list); // [a, a, bc]
    
            list.add(1,"b");
            System.out.println(list); // [a, b, a, bc]
    
            // 2.remove()移除指定索引位置的元素,并返回被移除的元素,接收一个参数时即元素索引
            String removedElement = list.remove(0);
            System.out.println(removedElement); // a
            System.out.println(list); // [b, a, bc]
    
            // 3.set()用某个元素替换集合中指定位置的元素,并将之前的被替换的元素返回,接收两个参数时,第一个参数是要替换元素的索引位置,第二个参数表示要替换的新元素
            String setElement = list.set(1, "f");
            System.out.println(setElement); // a
            System.out.println(list); // [b, f, bc]
    
            // 4.get()获取指定索引位置的元素,传入一个参数表示索引
            String getElement = list.get(1);
            System.out.println(getElement); // f
    
            // 扩展:遍历集合可以使用普通的for-i,通过get(i)拿到每一个元素外,还可以使用迭代器,除此之外,也可以使用加强版for(类似JavaScript中的for in,只需将in改为冒号,且这里变量表示某个元素,而JavaScript中变量表示索引),如:
            for (String item : list) {
                System.out.println(item); // 分别打印每一个元素
            };
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    ArrayList集合底层原理 :

    ArrayList是List集合的一个实现类,底层是一个数组,数组的特点长度不变,当使用add等方法的时候,实际是先创建一个长度比原来多1的新数组,然后将旧数组拷贝到新数组里面去,这也不难理解ArrayList增删难的弊端,又因为数组中元素的索引是连续的,因此查询速度非常快。

    LinkedList集合:

    此集合是List接口的链表实现,此实现类为多线程,即非同步。特别注意此实现类不能使用多态的方式创建对象。

    import java.util.LinkedList;
    
    // LinkedList是List接口的一个实现类,底层是一个链表结构,查询慢,增删快,并且该实现类有很多特有的方法来操作元素,因为是特有的,因此不能使用多态的方式来使用这些特有的方法。
    public class LinkedListClass {
        public static void main(String[] args) {
            // 因为LinkedList不能使用多态的方式创建对象,因此我们使用普通的方式创建对象并使用其特有的方法:
            LinkedList<String> lt = new LinkedList<String>();
    
            // 使用非特有方法add()向结合中添加默认元素:
            lt.add("a");
            lt.add("b");
            lt.add("c");
            System.out.println(lt); // [a, b, c]
    
            // 下面是特有方法:
            // 1.addFirst()方法向集合的最前面添加元素:
            lt.addFirst("F");
            System.out.println(lt); // [F, a, b, c]
    
            // 2.push()向集合最前面添加元素,等效于addFirst(),和javascript中push方法有个天壤之别,因为js中push方法是在数组后面追加元素:
            lt.push("H");
            System.out.println(lt); // [H, F, a, b, c]
    
            // 3.addLast()向集合的最后面添加元素,和add()没多大区别:
            lt.addLast("V");
            System.out.println(lt); // [H, F, a, b, c, V]
    
            // 4.getFirst()获取并返回第一个元素:空集合不能使用此方法,否则会报异常
            String firstItem = lt.getFirst();
            System.out.println(firstItem); // H
    
            // 5.getLast()获取并返回最后一个元素:空集合不能使用此方法,否则会报异常
            String lastItem = lt.getLast();
            System.out.println(lastItem); // V
    
            // 6.removeFirst()移除并返回集合的第一个元素:
            String reFiItem = lt.removeFirst();
            System.out.println(reFiItem); // H
            System.out.println(lt); // [F, a, b, c, V]
    
            // 7.pop()移除返回集合第一个元素,和removeFirst()类似:
            String pFiItem = lt.pop();
            System.out.println(pFiItem); // F
            System.out.println(lt); // [a, b, c, V]
    
            // 8.removeLast()移除并返回集合中最后一个元素:
            String reLastItem = lt.removeLast();
            System.out.println(reLastItem); // V
            System.out.println(lt); // [a, b, c]
    
            // 9.clear()清空集合中的元素:
            lt.clear();
            System.out.println(lt); // []
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    Vector集合:

    Vector类可以实现可增长的对象数组,单线程的。之前的旧api,被ArrayList取代了。

    提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
    笔者:苦海

  • 相关阅读:
    EEMD分解如何对IMF分量进行显著性检验?
    鲜花展示预约小程序的内容有有哪些
    传统算法与神经网络算法,神经网络算法有什么用
    Beego入门简单构建, 连接MySQL实现增查操作
    NX二次开发-调内部函数SEL_set_type_filter_index_by_label设置类型过滤器例子剖析怎么查找内部函数调用内部函数
    [附源码]java毕业设计医院挂号管理系统
    VS2019 如何添加自定义代码片段
    bootstrap和application的区别
    【leetcode】【2022/8/27】662. 二叉树最大宽度
    2022最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)
  • 原文地址:https://blog.csdn.net/weixin_46758988/article/details/128123558