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); // 分别打印每一个元素
        };
    }
}

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); // []
    }
}

Vector集合:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦海123

快乐每一天!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值