线性表(java)
线性表
概念:零个或者多个数据元素的有限序列。
特点:除了第一个元素没有前驱结点,最后一个元素没有后继结点外,其它元素有且仅有一个直接前驱和一个直接后继结点。元素的个数必定为有限个。
实现:
定义一个接口:
public interface List {
public void add(int index,Object element);//在指定下标添加元素
public boolean isEmpty();//判断线性表是否为空
public int size();//线性表中当前元素的个数
public Object get(int index);//获得指定下标的元素
public void remove(int index);//删除指定下标的元素
}
实现线性表
public class SeqList implements List {
final static int defaultSize=10;//默认长度
int maxSize;//最大长度
int size;//当前元素的个数
Object []array;//存储线性表
//初始化
public SeqList(){
this(defaultSize);
}
public SeqList(int sz){
maxSize=sz;
this.size=0;
array=new Object[sz];
}
@Override
public void add(int index, Object element) {
if(index>size||index<0){
System.out.println("插入下标错误");
}
if(size==maxSize){
System.out.println("线性表已经满了,无法进行插入");
}
System.arraycopy(array, index, array, index+1, size-index);
array[index]=element;
size++;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public int size() {
return size;
}
@Override
public Object get(int index) {
if(index>size||index<0){
System.out.println("获得下标位置出错");
}
if(size==0){
System.out.println("线性表为空");
}
return array[index];
}
@Override
public Object remove(int index) {
if(size==0){
System.out.println("线性表为空");
}
if(index>size-1){
System.out.println("删除下标有误");
}
Object l=array[index];
System.arraycopy(array, index+1, array, index, size-index-1);
size--;
return l;
}
@Override
public void ensureCapacity(int minCapacity) {
// TODO Auto-generated method stub
}
}
线性表的查找效率高,但是插入和删除要移动大量元素所以效率比较低。
ArrayList简易版实现
import java.util.Arrays;
public class MyList implements List{
private int size;
private Object []array;
public MyList(){
this(10);
}
public MyList(int initCapacity) {
super();
if(initCapacity<=0){
throw new IllegalArgumentException("下标不正确!");
}else{
this.array=new Object[initCapacity];
}
}
@Override
public void add(int index, Object element) {
if(index<0||index>size){
throw new IllegalArgumentException("下标不正确!");
}
ensureCapacity(size+1);
System.arraycopy(array, index, array, index, size-index);
array[index]=element;
size++;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public int size() {
return size;
}
@Override
public Object get(int index) {
if(index<0||index<size){
throw new IllegalArgumentException("下标不正确!");
}
return array[index];
}
@Override
public Object remove(int index) {
if(size==0){
System.out.println("线性表为空");
}
if(index>size-1){
System.out.println("删除下标有误");
}
Object l=array[index];
System.arraycopy(array, index+1, array, index, size-index-1);
size--;
return l;
}
@Override
public void ensureCapacity(int minCapacity) {//实现扩容
int oldCapacity=array.length;
if(oldCapacity<minCapacity){
Object oldData[]=array;
int newCapacity=(oldCapacity*3)/2+1;
if(newCapacity<minCapacity){
newCapacity=minCapacity;
}
array=Arrays.copyOf(oldData, newCapacity);
}
}
}
线性表(java)的更多相关文章
- 线性表java实现
顺序表 public class SequenceList { /* * content,节点内容 * location,节点在表中的位置(序号) * */ private String conten ...
- 数据结构(Java描述)之线性表
基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...
- Java Se :线性表
Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...
- Java线性表的排序
Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...
- 线性表的顺序存储结构——java
线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...
- 线性表的Java实现
一.概念 对于常用的数据结构,可分为线性结构和非线性结构,线性结构主要是线性表,非线性结构主要是数和图.当n>0时,表可表示为:(a0,a1,a2,a3,…an) 1. 线性表的特征: 1.存在 ...
随机推荐
- Android源码50例汇总,欢迎各位下载(转载)
下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载. 源码实例如下: <Android应用开发揭秘>源代码推荐 http://down.51 ...
- UIApplication 的学习
1.0 URL 的组成 == 协议头://主机名/路径 从iOS7 开始,系统提供了两种管理状态栏的方式,默认交给控制器去管理 2.0 旋转事件----> UIApplication --- ...
- 学习JS的心路历程-类型
前言 之前学JS时候都是靠着谷狗一路跌跌撞撞的学过来,从来没有去翻过MDN的文件,导致留了许多技术债给自己. 最近有幸遇到一位前辈并开始从头学JS,前辈表示学程序不看文件是想作死自己?于是我的第一份功 ...
- python错题整理
1.列表list去重 l1 = [1,1,2,3,5,5,4,4,4,5,6] set1 = set(l1) # print(set1) # set是集合 l2 = list(set1) # 将集合转 ...
- kafka清理
由于项目原因,最近经常碰到Kafka消息队列拥堵的情况.碰到这种情况为了不影响在线系统的正常使用,需要大家手动的清理Kafka Log.但是清理Kafka Log又不能单纯的去删除中间环节产生的日志, ...
- Linux命令_2
P42 远程管理 命令 目标 关机/重启 shutdown 查看或配置网卡信息 ifconfig ping 远程登录和复制文件 ssh scp 01.关机/重启 命令: shutdown 选项 时 ...
- CircleImageView of Android
[CircleImageView of Android] github上有一个开源的圆角图片项目.地址:https://github.com/hdodenhof/CircleImageView 使用分 ...
- python-ceilometerclient命令行(终结)
ceilometerclient入口 工程ceilometerclient shell.py中的main方法 ceilometerclient目录 --ceilometerclient --commo ...
- linux中weblogic相关命令操作
在weblogic的目录下找到bin目录,其中有startWeblogic.sh.startManagerWeblogic.sh等 首先需要启动startWeblogic.sh,这个是管理服务,也就是 ...
- vue-router导航守卫,限制页面访问权限
在项目开发过程中,经常会需要登录.注册.忘记密码等,也有很多页面是需要登录后才能访问,有些页面是无需登录就可以访问的,那么vue是怎么来限制这些访问权限问题的呢? vue-router导航守卫的bef ...