数据结构java(一)数组链表
链表是数据结构中最基础的内容,链表在存储结构上分成两种:数组形式储存,链式存储。
相比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(一)数组链表的更多相关文章
- 数据结构——Java实现单链表
一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...
- 数据结构——Java实现单向链表
结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...
- Java的数组,集合,数据结构,算法(一)
本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...
- 自己动手实现java数据结构(二) 链表
1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...
- 纯数据结构Java实现(3/11)(链表)
题外话: 篇幅停了一下,特意去看看其他人写的类似的内容:然后发现类似博主喜欢画图,喜欢讲解原理. (于是我就在想了,理解数据结构的确需要画图,但我的文章写给懂得人看,只配少量图即可,省事儿) 下面正题 ...
- java中数组以及集合
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[ ...
- 数据结构(java)
数据结构1.什么是数据结构?数据结构有哪些? 数据结构是指数据在内存中存放的机制. 不同的数据结构在数据的查询,增删该的情况下性能是不一样的. 数据结构是可以模拟业务场景. 常见的数据结构有:栈,队列 ...
- java算法01 - 链表
1.链表 在Java中实现链表,每个节点都有一个值,然后把它链接到下一个节点.下面来看一下节点的实现 class Node<E> { private E e; private Node&l ...
- jdk1.8 HashMap 实现 数组+链表/红黑树
转载至 http://www.cnblogs.com/leesf456/p/5242233.html 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Ja ...
随机推荐
- .NET(C#、VB)APP开发——Smobiler平台控件介绍:SignatureButton控件
SignatureButton控件 一. 样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的"Smobiler Components"拖动一个Sign ...
- ASP.NET MVC如何做一个简单的非法登录拦截
摘要:做网站的时候,经常碰到这种问题,一个没登录的用户,却可以通过localhost:23244/Main/Index的方式进入到网站的内部,查看网站的信息.我们知道,这是极不安全的,那么如何对这样的 ...
- css对齐方案总结
css对齐方案总结 垂直居中 通用布局方式(内敛元素和块状元素都适用) 利用flex:核心代码: 12345 .container{ display:flex; flex-direction:colu ...
- windows系统库
内部组件 这些程序库文件通常不会被程序直接使用,不过它们却是用来实现其他程序库功能的重要程序库. Hal.dll Windows系统的硬件抽象层就是由Hal.dll实现[1].HAL提供很多函数,而这 ...
- Redux进阶(一)
State的不可变化带来的麻烦 在用Redux处理深度复杂的数据时会有一些麻烦.由于js的特性,我们知道当对一个对象进行复制时实际上是复制它的引用,除非你对这个对象进行深度复制.Redux要求你每次你 ...
- 探究 CSS 混合模式\滤镜导致 CSS 3D 失效问题
今天在写一个小的 CSS Demo,一个关于 3d 球的旋转动画,关于 CSS 3D,少不了会使用下面这几个属性: { transform-style: preserve-3d; perspectiv ...
- 最小生成树之Kruskal(克鲁斯卡尔)算法
学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所 ...
- [Inside HotSpot] 模板解释器
0. 简介 众所周知,hotspot默认使用解释+编译混合(-Xmixed)的方式执行代码.它首先使用模板解释器对字节码进行解释,当发现一段代码是热点的时候,就使用C1/C2 JIT进行优化编译再执行 ...
- 第3章 简单的C程序设计——顺序程序设计
3.1 顺序程序设计举例 例:有人用温度计测量出用华氏法表示的温度(如64F),今要求把它转换为一摄氏法表示的温度(如17.8C) 解题思路:问题的关键在于找到两者的转换公式.根据物理学知识,公式为c ...
- SQL慢查询测试实践
1.开启慢查询的目的 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 2.设置mysql慢查询 方法一:全局变量设置(临时生效) ...