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

相比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. Protocol Buffers(2):编码与解码

    目录 Message Structure 解码代码一窥 varint Protobuf中的整数和浮点数 Length-delimited相关类型 小结 参考 博客:blog.shinelee.me | ...

  2. Struts2的拦截器配置

    1:引入默认的时间拦截器 <!-- 引入拦截器和引入拦截器栈一样的语法 --> <interceptor-ref name="defaultStack">& ...

  3. 使用LXD搭建Web网站

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生 发表于云+社区专栏 介绍 Linux的容器是Linux的一组进程,通过使用Linux内核功能与系统隔离.它是一个类似于虚拟 ...

  4. 如何在新工程中添加两个不同版本的的echarts库

    emmmmm.....标题我就觉得起的很变态.闲话不多说,先说出现的背景吧--. 因为业务上的需求,跟一个硬件对接,要做大屏展示大厅客流热力图分布(背景图是客户那边给的).然后这个机子传过来的数据就可 ...

  5. 分布式架构原理解析,Java开发必修课

    1. 分布式术语 1.1. 异常 服务器宕机 内存错误.服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用. 服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上. ...

  6. 百度APP移动端网络深度优化实践分享(一):DNS优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...

  7. class基本使用

    console.log(` 1.创建一个空对象 2.让this 指向刚刚创建好的空对象 3.执行构造函数内的代码 (为相关的属性和方法赋值) 4.返回创建好的对象`) // 1.创建一个空对象 // ...

  8. python基础-函数(9)

    一.函数的介绍 如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数 函数的语法格式: def 函数名(): 函数的功能代码 ...

  9. FragmentTabHostUnderLineDemo【FragmentTabHost带下划线】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用FragmentTabHost实现顶部选项卡(带下划线效果)展现. 效果图 代码分析 1.该Demo中采用的是FragmentT ...

  10. 总结http get和post的区别

    这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎. 什么是http? get.post常见的区别 ge ...