用java实现一个简单的ArrayList
来源:互联网 发布:做奥数题的软件 编辑:程序博客网 时间:2024/05/29 10:35
重复造轮子虽然不可取,但是温习一下数据结构,光看不做总是少了什么,所以也来实现一下List,希望多多包涵。
既然要实现一个List,先来简单说一下List的定义
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构
以上为百度百科的定义。我们这次实现的是顺序存储结构
的线性表。按照顺序读取和存储。
1.首先用接口把线性表需要实现的操作声明。为了图省事,其他的常用操作未进行定义,可以自己去实现。所有的add,remove等操作都没有进行boolean值的返还。
public interface CetrinwList<E> { /** * 取得数据 */ E get(int index); /** * 新增数据 */ void add(E e); /** * 移除数据 */ void remove(int index); /** * 插入数据 */ void insert(int index,E e); /** * 是否存在数据 * @return */ boolean contains(Object o); /** * 获得List长度 * @return */ int size(); /** * 是否为空 * @return */ boolean isEmpty(); /** * 清空 */ void clearList();}
2.实现定义好的接口。
public class CetrinwArrayList<E> implements CetrinwList<E>{ /** * 数组默认长度 */ private static final int DEFAULT_SIZE = 10; /** * 存储队列中的元素 */ private Object[] elements = null; /** *数组大小指针 */ private int capacity; /** * 当前游标 */ private int current; public CetrinwArrayList(){ this(DEFAULT_SIZE); } public CetrinwArrayList(int size){ if(size < 0){ throw new RuntimeException("数组大小不能小于0"); }else{ this.elements = new Object[size]; this.current = 0; capacity = size; } } public E get(int index) { confirmIndex(index); return (E) this.elements[index]; } public void add(E e) { confirmSize(); this.elements[current] = e; this.current++; } public void remove(int index) { confirmIndex(index); for (int i = index; i < elements.length; i++) { if(i + 1 < elements.length){ elements[i] = elements[i+1]; } } current--; } public void insert(int index,E e) { confirmIndex(index); for (int i = 0; i < elements.length; i++) { if(i >= index && i+2 < elements.length){ elements[i] = e; elements[i+1] = elements[i+2]; } } current++; } public boolean contains(Object o) { for (Object element : this.elements) { if(o.equals(element)){ return true; } } return false; } public int size() { return this.current; } public boolean isEmpty() { if(this.current >0){ return true; } return false; } public void clearList() { elements = new Object[DEFAULT_SIZE]; } /** * 确认当前数组的容量,如果满足,则不操作,如果不满足,则增加空间 */ private void confirmSize(){ if(this.current == this.capacity){ this.capacity = this.capacity + this.DEFAULT_SIZE; Object[] newElemets = new Object[this.capacity]; for (int i = 0; i < this.elements.length; i++) { newElemets[i] = this.elements[i]; } this.elements = newElemets; } } /** * 判断下标是否越界 */ private void confirmIndex(int index){ if(index > capacity || index < 0){ throw new RuntimeException("下标越界"); } }}
3.Junit的测试类
@Test public void cetrinWArrayListTest(){ CetrinwList<String> list = new CetrinwArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); System.out.println("下标为3的元素为"+list.get(3)); System.out.println("数组size:"+list.size()); list.remove(2); System.out.print("remove后的数组size:"+list.size()); System.out.println("remove后的数组:"); for (int i = 0; i < list.size() ; i++) { System.out.print(list.get(i)+","); } list.insert(3,"gg"); System.out.println(""); System.out.println("insert后的数组:"); for (int i = 0; i < list.size() ; i++) { System.out.print(list.get(i)+","); } }
4.运行结果
下标为3的元素为d数组size:4remove后的数组size:3remove后的数组:a,b,d,insert后的数组:a,b,d,gg,
以上就是java实现的一个简单的ArrayList。
1 0
- 用java实现一个简单的ArrayList
- 简单实现一个ArrayList
- 自己实现一个简单的ArrayList
- java的ArrayList的简单实现
- 数据结构: Java中ArrayList的简单实现
- 简单实现Java中的ArrayList
- ArrayList简单实现Java版
- Java手动实现简单 ArrayList
- 简单实现java中ArrayList
- java中一个ArrayList的用例
- java ArrayList 的实现
- 【Java】基于ArrayList实现的简单登录注册
- 用C语言写一个数组,实现类似JAVA语言中ArrayList的功能
- java中用HashMap,ArrayList,TreeMap实现一个模拟斗地主发牌的用例
- 17、实现一个简单的ArrayList类,以及静态嵌套类实现迭代器
- java中自己实现一个ArrayList
- 自己写一个简单的ArrayList
- 用HashMap简单实现ArrayList的添加,删除,读取。。。。。
- storyboard 修改 无反应
- 插入排序
- BZOJ4551 [Tjoi2016&Heoi2016]树
- POJ2484
- 利用Python实现简单的相似图片搜索的教程
- 用java实现一个简单的ArrayList
- 详解Gson使用(四)Map对象转化
- Adam学习19之在window下eclipse的mvn test
- 安装phpmyadmin并配置多个数据库实例到里面
- 希尔排序
- hdoj 2018(java)母牛的故事(斐波那契数列)
- hashmap与hashtable
- java基础教程5:内部类和内部接口
- 论文阅读:CVPR2016 Paper list