数据结构(Java实现)-ArrayList与顺序表

这篇具有很好参考价值的文章主要介绍了数据结构(Java实现)-ArrayList与顺序表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


什么是List
List是一个接口,继承自Collection。
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


List的使用
List是个接口,并不能直接用来实例化。
如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。


线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。
常见的线性表:顺序表、链表、栈、队列…
线性表在逻辑上是线性结构,也就说是连续的一条直线


顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成
数据的增删查改
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


接口的实现
类的成员
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
打印顺序表
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
对上述功能进行测试
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
上述两个功能的测试
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


所有代码如下
PosOutBoundsException

public class PosOutBoundsException extends RuntimeException{
    public PosOutBoundsException() {
    }

    public PosOutBoundsException(String message) {
        super(message);
    }
}

SeqList

public class SeqList {
    private int[] elem;
    private int usedSize;记录当前顺序表当中 有多少个有效的数据
    private static  final int DEFAULT_CAPACITY=2;

    public SeqList() {
        this.elem =new int[DEFAULT_CAPACITY];
    }

    //打印顺序表
    public void display(){
        for (int i = 0; i <this.usedSize; i++) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println();
    }

    //新增元素,默认在所有数据的结尾处添加
    public void add(int data){
        if(isFull()){
            resize();
            System.out.println("扩容成功,当前容量为"+this.elem.length);
        }
        this.elem[usedSize]=data;
        usedSize++;
        System.out.println("尾部添加元素成功");
    }
    public boolean isFull(){
        return usedSize== elem.length;//数组中元素的个数等于数组的长度
    }
    private void resize(){
        elem=Arrays.copyOf(elem,2*elem.length);//第二个参数为拷贝元素长度,如果超出原始数组的长度则补充默认值,如int型则补充0
    }

    //判断报中是否还有某个元素
    public boolean contain(int toFind){
        for (int i = 0; i <this.usedSize; i++) {
            if(elem[i]==toFind){
                return true;
            }
        }
        return false;
    }

    //查找某个元素对应的下标
    public int indexOf(int toFind){
        for (int i = 0; i <this.usedSize; i++) {
            if(elem[i]==toFind){
                return i;
            }
        }
        return -1;
    }

    //获取pos位置的数据
    public int get(int pos){
        if(!checkPos(pos)){
            throw new PosOutBoundsException("get 位置不合法");
        }
        return elem[pos];
    }
    private boolean checkPos(int pos){
        if(pos<0||pos>=usedSize){
            return false;
        }
        return true;
    }

    //获取顺序表的长度
    public int size(){
        return this.usedSize;
    }

    //给pos位置设置为value,为更新数据的意思
    public void set(int pos,int value){
        if(!checkPos(pos)){
            throw new PosOutBoundsException("set 位置不合法");
        }
        this.elem[pos]=value;
    }

    //在pos位置新增元素
    public void add(int pos,int data){
        if(pos<0||pos>this.usedSize){
            throw new PosOutBoundsException("add新增 位置不合法");
        }
        if(isFull()){
            resize();
        }
        //pos位置后的数据后移一位
        for (int i =this.usedSize-1; i>=pos; i--) {
            this.elem[i+1]=this.elem[i];
        }
        //存
        this.elem[pos]=data;
        this.usedSize++;
    }

    //删除第一次出现的数字key
    public void remove(int toRemove){
        if(isEmpty()){
            return;
        }
        int index=indexOf(toRemove);
        if(index==-1){
            return;//没有这个数字
        }
        for (int i =index; i <this.usedSize-1; i++) {
            this.elem[i]=this.elem[i+1];
        }
        this.usedSize--;

    }
    public boolean isEmpty(){
        return this.usedSize==0;
    }

    //清空顺序表
    public void clear(){
        this.usedSize=0;
    }
}

Test1.java

class Test35{
    public static void main(String[] args) {
        SeqList seqList=new SeqList();
        seqList.add(1);
        seqList.add(2);
        seqList.add(3);
        seqList.add(4);
        seqList.add(5);
        seqList.display();
        System.out.println(seqList.contain(5));
        System.out.println(seqList.indexOf(3));
        System.out.println(seqList.indexOf(7));
/*        System.out.println(seqList.size());
        try{
            seqList.set(15,9);
        } catch (PosOutBoundsException e) {
            e.printStackTrace();
            System.out.println("我捕获到了一个异常");
        }*/
        seqList.display();
        seqList.add(4,890);
        seqList.display();
        seqList.remove(890);
        seqList.display();
    }
}

ArrayList简介
ArrayList是以泛型方式实现的,使用时必须要先实例化
ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
也可以使用如下创建一个对象
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


ArrayList的构造
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


ArrayList常见操作
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


subList方法,会改变原来对象中0位置处的数据,截取拿到的是地址
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


ArrayList的遍历
ArrayList 可以使用3种方式遍历:for循环+下标、foreach、使用迭代器
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


ArrayList的扩容机制
按照1.5倍方式扩容
如果用户需要扩容大小 超过 原空间1.5倍,按照用户所需大小扩容


ArrayList的具体使用
简单的洗牌算法
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
运行结果如下
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
全部代码
Card

public class Card {
    //结合成为一张牌
    private String suit;//花色
    private int rank;//大小

    public Card(String suit, int rank) {//构造方法
        this.suit = suit;
        this.rank = rank;
    }
    //设置和获得一张牌的花色和大小
    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "【" +
                 suit +
                ", " + rank +
                '】';
    }
}

Test

public class Test {
    //设置花色,用于初始化所有牌
    private static final String[] SUITS={"♥","♠","♣","♦"};

    //初始化所有牌
    public static List<Card> buyCard(){
        List<Card> cards =new ArrayList<>();
        for (int i = 0; i <SUITS.length ; i++) {
            for (int j = 1; j <=13; j++) {
                Card card=new Card(SUITS[i],j );
                cards.add(card);
            }
        }
        return cards;
    }

    //洗牌  从最后一张牌开始到倒数第二张牌,随机的与前面的某一张牌交换
    public static void shuffle(List<Card> cards){
        Random random =new Random();//new了一个用于产生随机数的对象
        for (int i =cards.size()-1; i>0 ; i--) {
            int j=random.nextInt(i);//产生[0,i)之间的随机数
            Card temp=cards.get(i);
            cards.set(i,cards.get(j));
            cards.set(j,temp);
        }
    }

    public static void main(String[] args) {
        List<Card> cards =buyCard();
        System.out.println(cards);
        shuffle(cards);
        System.out.println(cards);

        //3个人,每个人轮流揭5张牌
        //每个人最后会得到5张牌,我们用hand1,hand2,hand3来存储每个人的5张牌
        //怎么用来表示每个人呢,这里我们用hand表示,在hand顺序表中,每个元素都是一个人
        //而每个人都有一个顺序表hand1(2,或者3)

        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<Card> hand3=new ArrayList<>();

        List<List<Card>> hand=new ArrayList<>();

        //将hand1,hand2,hand3添加到hand顺序表中
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        //发牌
        for (int i = 0; i <5; i++) {
            for (int j = 0; j <3; j++) {
                //拿走最上面的一张牌
                Card card=cards.remove(0);
                hand.get(j).add(card);
            }
        }
        System.out.println("第1个人得到的牌");
        System.out.println(hand1);
        System.out.println("第2个人得到的牌");
        System.out.println(hand2);
        System.out.println("第3个人得到的牌");
        System.out.println(hand3);
        System.out.println("剩余的牌");
        System.out.println(cards);

    }

}

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


利用ArraryList构造出杨辉三角(采用直角三角形的样式)

数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
同3个人玩扑克牌一样,这里我们也构造出一个二维的顺序表
用ret来存储所有的行,list用来存储每一行的元素
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows
运行结果如下
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows


ArrayList的问题及思考
数据结构(Java实现)-ArrayList与顺序表,数据结构(Java实现),数据结构,java,windows文章来源地址https://www.toymoban.com/news/detail-674040.html

到了这里,关于数据结构(Java实现)-ArrayList与顺序表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)

    🍃 数据结构是 计算机 存储 、 组织 数据的方式 🎉 线性 结构 线性表(数组、链表、栈、队列、哈希表) 🎉 树形 结构 二叉树 AVL 树 红黑树 B 树 堆 Trie 哈夫曼树 并查集 🎉 图形 结构 邻接矩阵 邻接表 🎁 线性表是具有 n 个 相同类型元素 的有限 序列 (n = 0) a1 是首节点

    2024年02月10日
    浏览(78)
  • 【Java】实现顺序表基本的操作(数据结构)

    在了解顺序表之前我们要先了解什么是线性表,线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构

    2024年02月03日
    浏览(53)
  • 【数据结构】顺序表与ArrayList

    作者主页: paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。 其他专栏

    2024年02月08日
    浏览(42)
  • 【数据结构(二)】顺序表与ArrayList

    ❣博主主页: 33的博客❣ ▶文章专栏分类:数据结构◀ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵 关注我带你学更多数据结构知识 在计算机科学中,数据结构是处理和组织数据的方法和技术。顺序表是一种常见的线性表数据结构,它基于数组实现,提供了快速的随机访问能力

    2024年04月12日
    浏览(39)
  • Java 中数据结构ArrayList的用法

    ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 add() 将元素插入到指定位置的 arraylist 中 addAll() 添加集合中的所有元素到 arraylist 中 clear() 删除 arraylist 中的所

    2024年02月10日
    浏览(43)
  • 【数据结构】从顺序表到ArrayList类

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,

    2024年01月24日
    浏览(47)
  • 探索Java集合框架—数据结构、ArrayList集合

    Java集合的使用相信大家都已经非常得心应手,但是我们怎么做到知其然,更知其所以然这种出神入化的境界呢?我们揭开集合框架底层神秘面纱来一探究竟 目录 一、背景介绍 二、思路方案 数据结构是什么? 数据结构可以分为线性和非线性两种数据结构 线性数据结构: 非

    2024年02月10日
    浏览(40)
  • Collection与数据结构 顺序表与ArrayList

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表: 顺序表、链表、栈、队列… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,

    2024年04月13日
    浏览(42)
  • [java数据结构] ArrayList和LinkedList介绍与使用

    (一) 线性表 (二) ArrayList 1. ArrayList的介绍 2. ArrayList的常见方法和使用 3. ArrayList的遍历 4. ArrayList的模拟实现 5. ArrayList的优缺点 (三) LinkedList 1. LinkedList的介绍 2. LinkedList的常见方法和使用 3. LinkedList的遍历 4. LinkedList的模拟实现 5. LinkedList的优缺点 (四) ArrayList和LinkedList的区别

    2024年01月21日
    浏览(46)
  • java八股文面试[数据结构]——ArrayList和LinkedList区别

      ArrayList和LinkedList的异同 二者的线程都不安全,相对线程安全的Vector,执行效率高。此外,ArrayList时实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedList比较占优势,因为LinledList要移动指针。对于新增和删除操作add

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包