java线性表多个属性_顺序存储结构的线性表(java实现)
线性表指的是由有限个数据元素组成的序列。
而顺序存储结构的线性表则表示逻辑上连续的序列,在物理存储上也是连续的。通常用数组来表示。
首先定义顺序线性表类,属性及其构造方法;
public class LinearList {
// number of elements in list.
int length;
//elements
T[] items;
/**
* dynamic arguments constructor.
* @param t elements list
*/
public LinearList(T... t) {
length = t.length;
items = t;
}
/**
* non-argument constructor.
*/
public LinearList() {}
}
对于无参数的构造方法执行后,需要通过初始化方法来生成空表;
/**
* initiate empty linear list.
* @param size size of initialized list
*/
public void initiate(int size) {
length = 0;
items = (T[]) new Object[size];
}
顺序存储线性表是随机访问的,可通过索引直接访问指定位置元素;
/**
* get the element of specific index.
* @param idx specific index
* @return element
*/
public T get(int idx) {
if (idx >= 0 && idx < length) {
return items[idx];
} else {
throw new IndexOutOfBoundsException("index:" + idx + " is not valid, index should be between 0 to (not include) length:" + length);
}
}
同样可直接访问指定位置元素的前驱和后继;
/**
* get the prior element of the specific index.
* @param idx specific index
* @return prior element
*/
public T getPrior(int idx) {
if (idx > 0 && idx < length) {
return items[idx - 1];
}
return null;
}
/**
* get the next element of the specific index
* @param idx specific index
* @return next element
*/
public T getNext(int idx) {
if (idx >= 0 && idx < length - 1) {
return items[idx + 1];
}
return null;
}
提供查询指定元素的索引地址,如果表中无指定查询元素则返回-1;
/**
* get the index of the specific element.
* @param t element needs locate
* @return the index of the specific element
*/
public int locate(T t) {
for (int idx = 0; idx < length; idx++) {
if (items[idx].equals(t)) {
return idx;
}
}
return -1;
}
提供插入新元素方法,如果插入位置在表末尾,则在存储空间足够的情况下,在末尾直接插入;如果插入位置在表中间,则需要将插入位置之后的元素依次向后移动,在插入位置空出来之后将新元素插入。
/**
* insert element at specific position.
* @param idx the index to insert
* @param t the element to be insert
*/
public void insert(int idx, T t) {
if (length == items.length) {
enlarge();
}
if (idx >= 0 && idx <= length) {
T[] temp = (T[]) new Object[length - idx];
for (int i = 0, j = idx; j < length; i++, j++) {
temp[i] = items[j];
}
items[idx] = t;
length += 1;
for (int i = 0, j = idx + 1; i < temp.length; i++, j++) {
items[j] = temp[i];
}
}
}
/**
* insert at tail
* @param t the element to be insert
*/
public void insert(T t) {
insert(length, t);
}
当表存储满插入元素前,通过enlarge方法扩展表存储空间,扩充空间后需要将原表中的元素重新拷贝至新存储空间的对应位置;
/**
* enlarge size of list as double of the length.
*/
public void enlarge() {
enlarge(length);
}
/**
* enlarge size of list with specific.
* @param expendSize
*/
public void enlarge(int expendSize) {
T[] temp = items;
items = (T[]) new Object[items.length + expendSize];
for (int idx = 0; idx < length; idx++) {
items[idx] = temp[idx];
}
}
还有表清空、判空等操作,比较简单;
/**
* if the list is empty.
* @return true or false
*/
public boolean isEmpty() {
return length == 0 ? true : false;
}
/**
* set list as empty.
*/
public void clear() {
for (int i = 0; i < length; i++) {
items[i] = null;
}
length = 0;
}
表之间的聚合操作(剔除重复元素);
/**
* merge lists
* @param l2 another list
* @return new list contains l1 and l2 non-duplicated elements
*/
public LinearList union(LinearList l2) {
LinearList temp = this;// new LinearList<>();
//temp.initiate(this.length + l2.length);
temp.enlarge(l2.length);
for (int l2Idx = 0; l2Idx < l2.length; l2Idx++) {
T element = l2.get(l2Idx);
if(temp.locate(element) == -1) {
temp.insert(element);
}
}
return temp;
}
java线性表多个属性_顺序存储结构的线性表(java实现)相关推荐
- 顺序存储结构的线性表
1.0. 什么是线性表? 所谓线性,即一条线,这条线可以是直线,也可以是曲线. 所谓表,肯定都不陌生,生活中有各种各样的表或者表格.我们在表格中填写各种各样的信息,通过表格,能够很好地对信息进行分类储 ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 3、线性表的顺序存储结构(顺序表)
线性表的顺序存储结构简称为顺序表.线性表的顺序存储结构是把线性表中的元素中的元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的存储空间中,它直接将线性表的逻辑结构映射到存储结构上,既 ...
- 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码
数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...
- 线性表的顺序存储结构之顺序表类的实现_Java
在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...
- java反射访问室友属性_如何与家人,室友和客人共享HomeKit访问权限
java反射访问室友属性 What's the point of having a house of the future if your family members, roommates, or ...
- 3.1_栈_顺序存储结构(数组形式)
[栈的定义] 栈(stack)是限定仅在表尾进行插入和删除操作的线性表. 栈又称为后进先出(Last In First Out)线性表,简称LIFO结构. (PS:定义中的表尾是指 栈顶!) [几个关 ...
- mysql怎么修改表的列名字_怎么修改mysql的表名和列名
怎么修改mysql的表名和列名 在mysql中,可以通过"ALTER TABLE 旧表名 RENAME 新表名;"语句来修改表名,通过"ALTER TABLE 表名 CH ...
- java内存 phd文件抓取_您可以从IBM PHD Java堆转储中提取字符串的值吗?
我有一个来自IBM jvm的PHD格式堆转储,我希望检查一些字符串的值.使用Sun JVM的二进制hprof转储,这是可能的,但是我无法从IBM转储中恢复此信息. 我试过了: >具有IBM DT ...
- html表单模板属性,HTML5超酷响应式表单美化模板插件
这是一款非常效果非常酷的HTML5超酷响应式表单美化效果插件.表单的整体效果使用扁平化风格,使用media queries来为各种屏幕创建响应式效果.在大屏幕上,整个表单分三列显示,当屏幕小到一定程度 ...
最新文章
- R语言使用pwr包的pwr.r.test函数对相关信息分析(Correlations)进行效用分析(power analysis)的语法
- python数据类型-Python核心数据类型概览
- python - 线程
- 基于OpenSSL自建CA和颁发SSL证书
- tableau2020.2版本可视化数据分析 新功能介绍
- ubuntu19.10升级
- java集合的扩容研究
- 视频教程-java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码-Java
- 通过命令行更换windows 10 激活码
- GIS招聘 | 江西省直事业单位(含测绘、地信等专业岗位)
- 三分钟带你快速了解网站开发的整个流程
- 推荐系统之协同过滤概述
- 【wmi】C++获取windows激活状态
- 为什么手机玩我的世界进服务器会显示红字,LOL进去时显示的蓝红标志是什么 | 手游网游页游攻略大全...
- python把英语句子成分字母_有没有那种能分析英语句子成分的APP?
- FTP 服务器搭建(图文教程、实现匿名与用户双登录)
- 10年程序员怒斥:只会八股文没用,公司招你来是做项目的,不是背题的……
- 我们来哈尔滨了,东北的老少爷们可以回家了
- 近端策略优化算法(PPO)
- 豆瓣电影Top250——电影详细
热门文章
- python编程之处理GB级的大型文件
- LVS-DR+Ldirectord+FreeNas实现负载均衡群集
- Failed to push selection: Read-only file system
- 分享一个自己写的table表格排序js插件(高效简洁)
- Spring 框架 执行SQL getJdbcTemplate().query update 用法
- 微信小程序-rpx尺寸介绍
- redis watchdog_干货:Redis分布式锁的原理以及如何续期
- access denied (java.io.FilePermission IKAnalyzer.cfg.xml read
- ACCESS_REFUSED - operation not permitted on the default exchange
- CSS样式大全(转)