链表是数据结构中最基础的内容,链表在存储结构上分成两种:数组形式储存,链式存储。

相比c语言需要的结构体,在java中由于有了面向对象编程,将指针‘藏’了起来,不需要分配内存。

所以只需要创建一个对象数组,为了能让链表更加实用,方便存储非基本类型的对象,所以使用了泛型。

菱形运算符<>中放你自己写的或者基本类型,比如你创建了一个Stdent类,想用链表将很多学生的信息存起来。

就可以myArrayList<Student> a=new myArrayList();这个链表就都存Student类的对象了。

数组链表的源码:

 import java.util.Arrays;

 /**
* @author 李正阳
* @param <E> 泛型:所存储的对象
*/
public class myArrayList<E> implements List<E> {
/**
* DEFAULT_SIZE 数组链表储存的最大值
* elementData 存储元素的数组
* capacity当前数组链表可以存储的个数(为了扩容存在)
* size当前链表存储的个数
*/
private final int DEFAULT_SIZE = 16;
private Object[] elementData;
private int capacity;
public int size; /**
* 初始化数组栈
*/
public myArrayList() {
elementData = new Object[DEFAULT_SIZE];
size = 0;
capacity=DEFAULT_SIZE;
} /**
* 在数组链表的最后添加元素
* @param data 添加的元素
* @return true 添加成功 false 添加失败
*/
@Override
public boolean add(E data) {
if(isFull()) {
relloc();
elementData[size] = data;
size++;
}else {
elementData[size] = data;
size++;
}
return true;
} /**
* 判满函数
* @return true 满 false 未满
*/
@Override
public boolean isFull() {
if (size == DEFAULT_SIZE-1) {
return true;
} else {
return false;
}
}
/**
* 判空函数
* @return true 空 false 未空
*/
@Override
public boolean isEmpty() {
if (size ==0) {
return true;
} else {
return false;
}
} /**
* 删除元素
* @param number 删除元素在数组中的位置
* @return
*/
@Override
public E remove(int number){ E temp;
if (number == size) {
temp = (E) elementData[size - 1];
size--;
} else if(number<size) {
temp = (E) elementData[number - 1];
for (int i = number; i < size; i++) {
elementData[i] = elementData[i + 1];
}
size--;
}else {
throw new ArrayIndexOutOfBoundsException();
}
return temp; } /**
* 删除数组最后的元素
* @return 删除那个元素
*/
@Override
public E remove(){
E temp;
temp = (E) elementData[size-1];
size--;
return temp;
} /**
* 设置某一个位置元素
* @param i 在数组的位置
* @param data 替换的元素
*/
@Override
public void set(int i,E data){
if(i<=size) {
elementData[i - 1] = data;
}else {
throw new ArrayIndexOutOfBoundsException();
}
} /**
* 取得数组中某个位置的元素
* @param i 数组的位置
* @return 这个位置的对象
*/
@Override
public E get(int i){
E temp;
if(i<=size) {
temp = (E) elementData[i - 1];
return temp;
}else {
throw new ArrayIndexOutOfBoundsException();
}
} /**
* 判断一条链表是否为回文
* @return false 否 true 是
*/
@Override
public boolean isPalindrome() {
if(!isEmpty()) {
for (int i = 0, j = size - 1; i < size - 1; i++, j--) {
if (String.valueOf(elementData[i]).equals(String.valueOf(elementData[j]))) {
} else {
return false;
}
}
return true;
}else {
throw new NullPointerException();
}
} /**
* 输出链表中所有元素
*/
@Override
public void traver() {
for (int i=0;i<size;i++){
System.out.print(elementData[i]+" ");
}
} /**
* 扩容将数组扩容为两倍
*/
private void relloc(){
capacity=DEFAULT_SIZE*2;
elementData=Arrays.copyOf(elementData,DEFAULT_SIZE*2);
}
}

List接口:

 /**
* @author 李正阳
* @param <E> 泛型
*/
public interface List<E> {
public boolean add(E data) ; /**
* 链式不需要这个方法
*/
default boolean isFull() {
return false;
}
public boolean isEmpty() ;
public E remove(int number);
public E remove();
public void set(int i,E data);
public E get(int i);
public boolean isPalindrome();
public void traver();
}

 数据结构(一点五)链式顺序表

https://www.cnblogs.com/lzy321/p/10371767.html

数据结构java(一)数组链表的更多相关文章

  1. 数据结构——Java实现单链表

    一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...

  2. 数据结构——Java实现单向链表

    结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...

  3. Java的数组,集合,数据结构,算法(一)

    本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...

  4. 自己动手实现java数据结构(二) 链表

    1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...

  5. 纯数据结构Java实现(3/11)(链表)

    题外话: 篇幅停了一下,特意去看看其他人写的类似的内容:然后发现类似博主喜欢画图,喜欢讲解原理. (于是我就在想了,理解数据结构的确需要画图,但我的文章写给懂得人看,只配少量图即可,省事儿) 下面正题 ...

  6. java中数组以及集合

    java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5]  a是在java栈中分配的引用变量,类型是int[ ...

  7. 数据结构(java)

    数据结构1.什么是数据结构?数据结构有哪些? 数据结构是指数据在内存中存放的机制. 不同的数据结构在数据的查询,增删该的情况下性能是不一样的. 数据结构是可以模拟业务场景. 常见的数据结构有:栈,队列 ...

  8. java算法01 - 链表

    1.链表 在Java中实现链表,每个节点都有一个值,然后把它链接到下一个节点.下面来看一下节点的实现 class Node<E> { private E e; private Node&l ...

  9. jdk1.8 HashMap 实现 数组+链表/红黑树

    转载至 http://www.cnblogs.com/leesf456/p/5242233.html 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Ja ...

随机推荐

  1. windows下,读取快捷方式lnk所指向的路径

    BOOL GetLnkFileName( OUT PWSTR pLnkName, OUT PWSTR OepnFileNameBuufer, IN DWORD OpenFileNameBufferSi ...

  2. 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已. 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂. 不过,这些文章对于那些初学者而 ...

  3. vue之$root,$parent

    $root vue状态管理使用vuex,如果项目不大,逻辑不多,name我们没必要用vuex给项目增加难度,只需要用$root设置vue实例的data就行了,如下 main.js new Vue({ ...

  4. 全球第一免费开源ERP Odoo工业互联网生产制造功能模块术语解析

    物料清单 物料清单(BoM)用于描述物料.每种物料的数量.以及制造某一产品所需的步骤.由于行业和成品性质的不同,同一个文件可能有不同的命名.例如,在制药行业中,可以使用术语“处方”. 周期 产品周期是 ...

  5. Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{...

    转载请标明出处:https://www.cnblogs.com/tangZH/p/10764568.html 在做多渠道打包的时候出现了这个错误,在高版本的gradle出现. 具体错误为:Cannot ...

  6. SQL Server 动态掩码

    介绍 动态数据掩码(DDM)是SQL Server 2016引入的一个新功能.目的就是限制没有权限的人去看到一些隐私信息.管理员用户能够决定哪些字段是需要被掩码的,那么如何在不改变应用程序代码的基础上 ...

  7. Linux vi/vim编辑器常用命令与用法总结

    (一)vi/vim是什么?Linux世界几乎所有的配置文件都是以纯文本形式存在的,而在所有的Linux发行版系统上都有vi编辑器,因此利用简单的文字编辑软件就能够轻松地修改系统的各种配置了,非常方便. ...

  8. vs 2017 vs code

    vs 2017   Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH ==== ...

  9. Spring Cloud Eureka 常用配置详解,建议收藏!

    前几天,栈长分享了 <Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!>,今天来分享下 Spring Cloud Eureka 常用的一些参数配置及说 ...

  10. CentOS7 安装mysql 5.7

    一.安装准备 检查系统中是否安装了mysqlrpm -qa|grep mysql如果有安装mysql,则需要先卸载之前安装的mysqlyum -y remove mysql然后再查看mysql是否都卸 ...