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

相比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. 使用BeautifulSoup和正则表达式爬取时光网不同地区top100电影并使用Matplotlib对比

    还有一年多就要毕业了,不准备考研的我要着手准备找实习及工作了,所以一直没有更新. 因为Python是自学不久,发现很久不用的话以前学过的很多方法就忘了,今天打算使用简单的BeautifulSoup和一 ...

  2. 设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  3. nginx 隐藏版本号与WEB服务器信息

    nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看看最终的隐藏结果吧 具体怎么实现呢,其实也很简单,请往下看 1 官网下载最新稳定版 wget http://nginx.org/dow ...

  4. Web前端-Vue.js必备框架(五)

    Web前端-Vue.js必备框架(五) 页面组件,商品列表组件,详情组件,购物车清单组件,结算页组件,订单详情组件,订单列表组件. vue-router 路由 vuex 组件集中管理 webpack ...

  5. 提升机器学习数学基础,这7本书一定要读-附pdf资源

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | KDnuggets 作者 | Ajit Jaokar 转自 | 新智元 编辑 | 大明 [编 ...

  6. 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布

    引言 Odoo 12.0是目前全球Odoo社区最新推出的产品版本代号,该产品具有划时代的意义,增加了如互联网级的知识库网盘功能.工业互联网的IOT设备矩阵管控功能,全新的Python Sass前端引擎 ...

  7. [ArcGIS API for JavaScript 4.8] Sample Code-Popups-1-popupTemplate的概念和popup中属性字段值的多种表现形式

    [官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html] 一. ...

  8. java:比赛中常用方法整理——字符串(基础)

    一.将字符串转化为字符数组: toCharArray返回一个字符数组. char[] a=J.toCharArray(); 二.字符串的长度 字符串的长度和字符数组的长度是不一'样'的. 字符串长度( ...

  9. 如何用GoldWave批量删除mp3文件开头65秒?

    具体操作如下: 一.打开goldwave--文件--批处理 二.批处理设置:     添加需处理的文件或文件夹(右侧)         1.转换:设置转换格式.         2.处理:       ...

  10. javascript 字符串转换数字的方法大总结

    方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...