使用JAVA数组实现顺序表
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数组实现顺序表相关推荐
- java设计一个顺序表类的成员函数_顺序表代码讲解以及实现
用C语言编写一个有关顺序表的程序代码 创建一个顺序表,其数据元素类型为整型: 在该顺序表中插入数据(#include #include #define MaxSize 50 typedef char ...
- java如何给顺序表赋值_JAVA模拟新增顺序表及单链表
最近在回顾大学学的数据结构,这里给大家用javwww.cppcns.coma模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序www.cppcns.com表 * * @author cjd * ...
- C语言用数组(顺序表)实现大小固定的队列的方法
顺序队列,即采用顺序表模拟实现的队列结构. 我们知道,队列具有以下两个特点: 1.数据从队列的一端进,另一端出: 2.数据的入队和出队遵循"先进先出"的原则: 因此,只要使用顺序表 ...
- java设计一个顺序表类的成员函数,用java编写一个逐个输出顺序表中所有数据元素的成员函数...
import java.util.ArrayList; import java.util.List; public class Test { /** * @param args */ public s ...
- java实现线性顺序表
2019独角兽企业重金招聘Python工程师标准>>> /*** * 线性顺序表*/ public class SequentialLinearList {private char[ ...
- JAVA中修改顺序表中的元素_在Java中修改列表的每个项目
小编典典 第二个版本会更好.在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModificationException. 但是,然后您以错误的方式使用了It ...
- 【Leetcode数据结构算法题】合并两个有序数组(顺序表篇)
题目内容: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2中的元素数目. 请你 合并 nums2 到 nums1 ...
- JAVA中修改顺序表中的元素_java – 在列表中查找元素并使用stream()更改它
如果您的目标是只找到一个元素,那么您可以这样做 MyItem item = l.stream() .filter(x -> x.getValue() > 10) .findAny() // ...
- java数组有顺序吗_java – 使用特定顺序对(数组)列表进行排序
是的,您可以创建一个 Comparator来创建排序策略,或者定义实现 Comparable的类的自然顺序 作为旁注: It is strongly recommended,but not stric ...
最新文章
- Java之Spring mvc详解(非原创)
- 三、链表(Linked List)(原理)
- 计算机一级ms office选择题,2012计算机一级MsOffice选择题及答案(1)
- noip2011day1题解
- python的while和for循环
- 如何在MySQL中导入和导出数据库并重置root密码
- JSK-5 矩阵翻转【入门】
- 空间索引 - 四叉树
- 车载与体征/手势检测 毫米波雷达信号处理流程
- python 问卷调查系统_GitHub - JukieChen/surveySystem-1: 问卷调查系统
- 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型
- 虚拟化实战——存储(二)
- C语言中简单冒泡排序不花里胡哨
- 游戏HTML翻翻乐,大班益智游戏翻翻乐教案
- word取消英文首字母自动大写问题
- java小程序-画一幅海底世界的图
- Advantech PCI card 驱动注册 --W T
- 广域网是什么?43.227.216.x
- iso体系认证有哪些?
- python飞机如何使用机器人
热门文章
- python与excel结合能做什么-openpyxl怎样按行和按列读取excel
- 在当当买了python怎么下载源代码-python爬虫爬取当当网
- python如何爬虫网页数据-python爬虫——爬取网页数据和解析数据
- python批量读取csv文件-Python读取/批量读取文件
- 怎么自学python语言-怎样学好python
- python语言入门m-Python语言入门详解!快速学成Python!
- 下列哪个不是目前python里的内置模块-python引入模块的五种方式与内置模块
- python工作-Python自动化运维|Python语言工作岗位待遇如何?
- cmd切换python版本-cmd 切换python版本
- python有道翻译接口-【Python】Python利用有道翻译开发API应用示例