1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象。

2,默认构造方法创建了一个默认大小为16的Object数组;带参数的构造方法创建一个指定长度的Object数组

3,实现的顺序表的基本操作有:返回表的长度、获取指定索引处的元素(注意是索引,而不是位置。索引以下标0开始,位置以下标1开始)、按值查找数据元素的位置、直接插入元素(顺序表尾部)、向指定位置插入元素、直接删除元素(在顺序表尾部)、删除指定索引处元素、判断表是否为空、清空表。

4,在Java类库中,java.util.ArrayList 类 实现了顺序表,因此可以直接使用JAVA类库中的ArrayList来完成顺序表的各种操作。以下为实现顺序表的具体代码:

  1 import java.util.Arrays;
  2
  3 public class SequenceList<T> {
  4     private final int DEFAULT_SIZE = 16;//final实例变量显示指定初始值,且不再变化。
  5
  6     private Object[] elementData;//该数组用来保存顺序表中的元素
  7     private int capacity;//保存数组的长度
  8     private int size;//保存顺序表中当前元素的个数
  9
 10     //以默认的大小创建顺序表
 11     public SequenceList(){
 12         capacity = DEFAULT_SIZE;
 13         elementData = new Object[capacity];
 14     }
 15
 16     //以指定的大小创建顺序表
 17     public SequenceList(int initSize){
 18         capacity = 1;
 19         while(capacity < initSize)
 20             capacity <<= 1;//将capacity设置成大于initSize的最小2次方
 21         elementData = new Object[capacity];
 22     }
 23
 24     //获取顺序表中当前元素的个数
 25     public int length(){
 26         return size;
 27     }
 28
 29     //获取顺序表中索引为  i 处的元素,i表示索引,即以 0 开始
 30     public T get(int i){
 31         if(i < 0 || i > size - 1)
 32             throw new IndexOutOfBoundsException("顺序表索引越界");
 33         return (T)elementData[i];
 34     }
 35
 36     //查看顺序表中指定元素的索引,若未找到,返回-1
 37     public int locate(T element){
 38         for(int i = 0; i < size; i++)
 39             if(elementData[i].equals(element))
 40                 return i;
 41         return -1;
 42     }
 43
 44     //在顺序表的指定索引处插入一个元素
 45     public void insert(T element, int index){
 46         if(index < 0 || index > size)
 47             throw new IndexOutOfBoundsException("顺序表索引越界");
 48         ensureCapacity(size + 1);//确保顺序表满时进行扩容,从而能插入元素
 49         //将指定索引后的所有元素向后移动一个位置
 50 //        System.arraycopy(elementData, index, elementData, index + 1, size - index);
 51         for(int i = size; i > index; i--)
 52             elementData[i] = elementData[i - 1];
 53         elementData[index] = element;
 54         size++;//顺序表中的元素个数增1
 55     }
 56
 57     private void ensureCapacity(int minCapacity){
 58         //当数组容量已满时,对数组进行扩容。将容量扩展到大于minCapacity的最小2的次方
 59         if(minCapacity > capacity){
 60             while(capacity < minCapacity)
 61                 capacity <<= 1;
 62             elementData = Arrays.copyOf(elementData, capacity);
 63         }
 64     }
 65
 66     //在顺序表的末尾添加一个元素
 67     public void add(T element){
 68         insert(element, size);
 69     }
 70
 71     //删除顺序表中指定索引处的元素
 72     public T delete(int index){
 73         if(index < 0 || index > size - 1)
 74             throw new IndexOutOfBoundsException("顺序表索引越界");
 75         T oldValue = (T)elementData[index];
 76         int numMoved = size - index - 1;//计算需要移动的元素个数
 77         if(numMoved > 0){
 78             System.arraycopy(elementData, index + 1, elementData, index, numMoved);
 79         }
 80         elementData[--size] = null;//让垃圾回收器及时回收,避免内存泄露
 81         return oldValue;
 82     }
 83
 84     //删除顺序表中的最后一个元素
 85     public T remove(){
 86         return delete(size - 1);
 87     }
 88
 89     //判断顺序表是否为空表
 90     public boolean empty(){
 91         return size == 0;
 92     }
 93
 94     //清空顺序表
 95     public void clear(){
 96         Arrays.fill(elementData, null);//将数组elementData中的每个元素都赋值null
 97         size = 0;
 98     }
 99
100     public String toString(){
101         if(size == 0)
102             return "[]";
103         else{
104             StringBuilder sb = new StringBuilder("[");
105             for(int i = 0; i < size; i++)
106                 sb.append(elementData[i].toString() + ", ");
107             int len = sb.length();
108             //删除由于上面for循环中最后添加的多余的两个字符 (一个是逗号,一个是空格符号)
109             return sb.delete(len - 2, len).append("]").toString();
110         }
111     }
112 }

转载于:https://www.cnblogs.com/hapjin/p/4440243.html

使用JAVA数组实现顺序表相关推荐

  1. java设计一个顺序表类的成员函数_顺序表代码讲解以及实现

    用C语言编写一个有关顺序表的程序代码 创建一个顺序表,其数据元素类型为整型: 在该顺序表中插入数据(#include #include #define MaxSize 50 typedef char ...

  2. java如何给顺序表赋值_JAVA模拟新增顺序表及单链表

    最近在回顾大学学的数据结构,这里给大家用javwww.cppcns.coma模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序www.cppcns.com表 * * @author cjd * ...

  3. C语言用数组(顺序表)实现大小固定的队列的方法

    顺序队列,即采用顺序表模拟实现的队列结构. 我们知道,队列具有以下两个特点: 1.数据从队列的一端进,另一端出: 2.数据的入队和出队遵循"先进先出"的原则: 因此,只要使用顺序表 ...

  4. java设计一个顺序表类的成员函数,用java编写一个逐个输出顺序表中所有数据元素的成员函数...

    import java.util.ArrayList; import java.util.List; public class Test { /** * @param args */ public s ...

  5. java实现线性顺序表

    2019独角兽企业重金招聘Python工程师标准>>> /*** * 线性顺序表*/ public class SequentialLinearList {private char[ ...

  6. JAVA中修改顺序表中的元素_在Java中修改列表的每个项目

    小编典典 第二个版本会更好.在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModificationException. 但是,然后您以错误的方式使用了It ...

  7. 【Leetcode数据结构算法题】合并两个有序数组(顺序表篇)

    题目内容: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2中的元素数目. 请你 合并 nums2 到 nums1 ...

  8. JAVA中修改顺序表中的元素_java – 在列表中查找元素并使用stream()更改它

    如果您的目标是只找到一个元素,那么您可以这样做 MyItem item = l.stream() .filter(x -> x.getValue() > 10) .findAny() // ...

  9. java数组有顺序吗_java – 使用特定顺序对(数组)列表进行排序

    是的,您可以创建一个 Comparator来创建排序策略,或者定义实现 Comparable的类的自然顺序 作为旁注: It is strongly recommended,but not stric ...

最新文章

  1. Java之Spring mvc详解(非原创)
  2. 三、链表(Linked List)(原理)
  3. 计算机一级ms office选择题,2012计算机一级MsOffice选择题及答案(1)
  4. noip2011day1题解
  5. python的while和for循环
  6. 如何在MySQL中导入和导出数据库并重置root密码
  7. JSK-5 矩阵翻转【入门】
  8. 空间索引 - 四叉树
  9. 车载与体征/手势检测 毫米波雷达信号处理流程
  10. python 问卷调查系统_GitHub - JukieChen/surveySystem-1: 问卷调查系统
  11. 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型
  12. 虚拟化实战——存储(二)
  13. C语言中简单冒泡排序不花里胡哨
  14. 游戏HTML翻翻乐,大班益智游戏翻翻乐教案
  15. word取消英文首字母自动大写问题
  16. java小程序-画一幅海底世界的图
  17. Advantech PCI card 驱动注册 --W T
  18. 广域网是什么?43.227.216.x
  19. iso体系认证有哪些?
  20. python飞机如何使用机器人

热门文章

  1. python与excel结合能做什么-openpyxl怎样按行和按列读取excel
  2. 在当当买了python怎么下载源代码-python爬虫爬取当当网
  3. python如何爬虫网页数据-python爬虫——爬取网页数据和解析数据
  4. python批量读取csv文件-Python读取/批量读取文件
  5. 怎么自学python语言-怎样学好python
  6. python语言入门m-Python语言入门详解!快速学成Python!
  7. 下列哪个不是目前python里的内置模块-python引入模块的五种方式与内置模块
  8. python工作-Python自动化运维|Python语言工作岗位待遇如何?
  9. cmd切换python版本-cmd 切换python版本
  10. python有道翻译接口-【Python】Python利用有道翻译开发API应用示例