最近又重新在看慕课网的数据结构,然后把示例代码整理一下。

public class Array<E> {

    private E[] data;
private int count = 0; public Array(int length){ data = (E[]) new Object[length];
} public Array(){ this(10);
} /**
* 获取数组长度
* @return
*/
public int getLength(){ return data.length;
} public int getCount(){ return count;
} public boolean isEmpty(){ return count == 0;
} /**
* 追加元素
* @param item
*/
public Array<E> add(E item){ return add(count, item); } /**
* 插入元素
* @param index 索引位置
* @param item 元素
*/
public Array<E> add(int index, E item){ //元素索引必须合法,则插入位置不能造成元素位置不连续
if(index < 0 || index > count) throw new IllegalArgumentException("Get failed Index is illegal."); if(count == data.length){
resize((int) (data.length * 1.5));
} //插入时,从尾部开始,每个元素后移动一位,直到当前索引位置为止
for(int i = count - 1; i >= index; i--){
data[i + 1] = data[i];
} data[index] = item;
count++; return this;
} /**
* 获取元素
* @param index 索引,负数表示倒数
* @return
*/
public E get(int index){ if(index < 0) index += count;
if(index >= count) throw new IllegalArgumentException("Get failed Index is illegal."); return data[index];
} /**
* 修改元素
* @param index 索引,负数表示倒数
* @param item
*/
public Array<E> set(int index, E item){ if(index < 0) index += count;
if(index >= count) throw new IndexOutOfBoundsException();
data[index] = item; return this;
} /**
* 删除给定索引位置的元素
* @param index
* @return 元素
*/
public E remove(int index){ if(index < 0) index += count;
if(index >= count) throw new IndexOutOfBoundsException(); for(int i = index; i < count - 1; i++){
data[i] = data[i + 1];
} count--;
data[count] = null; //收缩容量
if(count == data.length / 4 && data.length / 2 > 0){
resize(data.length / 2);
} return data[index];
} /**
* 删除给定元素
* @param item
* @return
*/
public boolean remove(E item){ int index = find(item);
if(index >= 0){
remove(index);
return true;
}
return false;
} /**
* 删除所有给定元素
* @param item
* @return boolean
*/
public boolean removeAll(E item){ int index = find(item);
if(index > -1){ do{
remove(index);
index = find(item); }while(index <= 0); return true;
} return false;
} /**
* 重新分配数组长度
* @param length
*/
private void resize(int length){ E[] data = (E[]) new Object[length];
for(int i = 0; i < count; i++){
data[i] = this.data[i];
}
this.data = data;
} /**
* 判断元素是否存在
* @param item
* @return boolean
*/
public boolean contains(E item){ return (find(item) > -1)? true : false;
} /**
* 查找元素所在位置
* @param item
* @return 索引位置
*/
public int find(E item){ for(int i = 0; i < count; i++){
//对象之间用 equals 方法,表示值比较
if(data[i].equals(item)) return i;
}
return -1;
} @Override
public String toString(){ StringBuilder sb = new StringBuilder();
sb.append(String.format("Array[%d]: ", data.length, count));
sb.append('[');
for(int i = 0; i < count; i++){
sb.append(data[i]);
if(i != count - 1) sb.append(", ");
}
sb.append("]"); return sb.toString();
} }

Java数组操作类的更多相关文章

  1. 菜鸡的Java笔记 实践 - java 数组操作

    讲解一个继承的实现思路                要求定义一个数组操作类(Array类),在这个类里面可以进行整型数组的操作,由外部传入数组的大小        ,并且要求实现数据的保存以及数据的 ...

  2. JAVA文件操作类和文件夹的操作代码示例

    JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...

  3. Java数组操作的10大方法

    转载自码农网 译文链接:http://www.codeceo.com/article/10-java-array-method.html 英文原文:Top 10 Methods for Java Ar ...

  4. Java文件操作类效率对比

    前言 众所周知,Java中有多种针对文件的操作类,以面向字节流和字符流可分为两大类,这里以写入为例: 面向字节流的:FileOutputStream 和 BufferedOutputStream 面向 ...

  5. 并发库应用之二 & Java原子性操作类应用

    Java5的线程并发库中,提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值( ...

  6. Java 数学操作类

    数学操作类 Math类 数学计算操作类 类属性值 Math.E ^ Math.PI 圆周率 类方法 Math类中,一切方法都是 static 型,因为Math类中没有普通属性. round() 方法 ...

  7. Java大数操作类

    Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: packag ...

  8. php 数组操作类(整合 给意见)

    数组操作函数整理: /* 将一个二维数组按照指定字段的值分组 * * @param array $arr * @param string $keyField * * @return array */ ...

  9. Java数组操作十大方法 (转)

    定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c&q ...

随机推荐

  1. Linux套接字与虚拟文件系统(1):初始化和创建

    http://www.cppblog.com/qinqing1984/archive/2015/05/03/210521.html 引言   在Unix的世界里,万物皆文件,通过虚拟文件系统VFS,程 ...

  2. UFUN函数 UF_ATTR函数(UF_ATTR_read_value 函数用法)

    //此函数的功能是输入tag值,返回与属性标题对应的属性值 static string read_attr(tag_t object_tag) { UF_initialize(); ]="零 ...

  3. H5制作显示轮播图的方法Swiper

    1.需要引入Swiper插件 <!-- swiper插件 --> <link rel="stylesheet" href="https://unpkg. ...

  4. minio gataway 模式快速提供s3 兼容的文件服务

    实际很多场景我们已经有了遗留系统的文件存储方式(ftp,或者共享目录),但是这个方式可能不是很好,对于web 不是很友好 实际上minio 也提供了gateway 的模式,可以方便快速的将遗留系统的存 ...

  5. 鸿蒙OS与手机系统

    鸿蒙发布会上,华为只是说手机端能很快切换到鸿蒙上,但并没有将切换到手机端放到计划表.如果不出意外,手机会是最后用上鸿蒙的终端,尽管它是现在对人们最重要.应用最多.也是人们讨论最多希望鸿蒙迁移到的终端. ...

  6. 微信小程序 自定义导航组件 nav头部 全面屏设计

    nav-dynamic 微信小程序自定义nav头部组件:适配全面屏设计: 实现功能 初始进入页面时,展示初始状态下的nav样式: 页面滚动时,监听页面滚动事件,展示滚动状态下的nav样式: 根据配置字 ...

  7. fork,vfork

    转自 http://blog.csdn.net/todd911/article/details/14062103 1.fork函数 一个现有的进程可以调用fork函数创建一个新的子进程. #inclu ...

  8. 【luoguP2989】[USACO10MAR]对速度的需要Need For Speed

    题目描述 最大化平均值 二分一个\(x\) \(check\): \(\frac{F+\sum_{i=1}^{n} X_{i} \times F_{i}}{M+\sum_{i=1}^{n} X_{i} ...

  9. GoCN每日新闻(2019-10-27)

    GoCN每日新闻(2019-10-27) 1. Golab(意大利GopherCon)2019见闻 http://fedepaol.github.io/blog/2019/10/23/golab-20 ...

  10. ModuleNotFoundError: No module named 'rest_framework_swagger'

    pip3.6 install django-rest-swagger