普通int:

public class Array {
//成员变量
private int[] data;
private int size; //构造函数,传入数组的容量capacity构造Array
public Array(int capacity){
data=new int[capacity];
size=0;
}
//无参数构造函数,默认数组的容量capacity=10
public Array(){
this(10);
}
//获取数组中元素的个数
public int getSize(){
return size;
}
//获取数组的容量
public int getCapacity(){
return data.length;
}
//返回数组是否为空
public boolean isEmpty(){
return size==0;
}
//向所有元素后添加一个新元素
public void addLast(int e){
add(size, e);
}
//在所有元素前面添加一个新元素
public void addFirst(int e){
add(0, e);
}
//获取index索引的位置的元素
int get(int index){
if(index<0||index>=size)
throw new IllegalArgumentException("Get failed.Index is illegal.");
return data[index];
}
//修改index索引位置的元素为e
void set(int index,int e){
if(index<0||index>=size)
throw new IllegalArgumentException("Get failed.Index is illegal.");
data[index]=e;
} //查找数组中是否有元素e
public boolean contains(int e){
for (int i=0;i<size;i++){
if(data[i]==e){
return true;
}
}
return false;
}
//查找数组中元素e所在的索引,如果不存在元素e,则返回-1
public int find(int e){
for(int i=0;i<size;i++){
if(data[i]==e){
return i;
}
}
return -1;
}
//从数组中删除index位置的元素,返回删除的元素
public int remove(int index){
if(index<0||index>=size)
throw new IllegalArgumentException("Remove failed.Index is illegal.");
int ret=data[index];
for(int i=index+1;i<size;i++)
data[i-1]=data[i];
size--;
return ret;
}
//从数组中删除第一个元素,返回删除的元素
public int removeFirst(){
return remove(0);
}
//从数组中删除最后一个元素,返回删除的元素
public int removeLast(){
return remove(size-1);
}
//从数组中删除元素e
public void removeElement(int e){
int index=find(e);
if(index!=-1)
remove(index);
} //在第index个位置插入一个新元素e
public void add(int index,int e){
if(size==data.length)
throw new IllegalArgumentException("Add failed.Array is full.");
if(index<0||index>size)
throw new IllegalArgumentException("Add failed.Require index>=0 and index<=size.");
for(int i=size-1;i>=index ;i--)
data[i+1]=data[i]; data[index]=e;
size++;
}
@Override
public String toString(){
StringBuilder res=new StringBuilder();
res.append(String.format("Array:size=%d,capacity=%d\n", size,data.length));
res.append('[');
for(int i=0;i<size;i++){
res.append(data[i]);
if(i!=size-1)//判断是否是最后一个元素
res.append(",");
}
res.append(']');
return res.toString();
}
}

  泛型:

public class Array<E> {
//成员变量
private E[] data;
private int size; //构造函数,传入数组的容量capacity构造Array
public Array(int capacity){
data=(E[])new Object[capacity];
size=0;
}
//无参数构造函数,默认数组的容量capacity=10
public Array(){
this(10);
}
//获取数组中元素的个数
public int getSize(){
return size;
}
//获取数组的容量
public int getCapacity(){
return data.length;
}
//返回数组是否为空
public boolean isEmpty(){
return size==0;
}
//向所有元素后添加一个新元素
public void addLast(E e){
add(size, e);
}
//在所有元素前面添加一个新元素
public void addFirst(E e){
add(0, e);
}
//获取index索引的位置的元素
public E get(int index){
if(index<0||index>=size)
throw new IllegalArgumentException("Get failed.Index is illegal.");
return data[index];
}
//修改index索引位置的元素为e
public void set(int index,E e){
if(index<0||index>=size)
throw new IllegalArgumentException("Get failed.Index is illegal.");
data[index]=e;
} //查找数组中是否有元素e
public boolean contains(E e){
for (int i=0;i<size;i++){
if(data[i].equals(e){
return true;
}
}
return false;
}
//查找数组中元素e所在的索引,如果不存在元素e,则返回-1
public int find(E e){
for(int i=0;i<size;i++){
if(data[i].equals(e)){
return i;
}
}
return -1;
}
//从数组中删除index位置的元素,返回删除的元素
public E remove(int index){
if(index<0||index>=size)
throw new IllegalArgumentException("Remove failed.Index is illegal.");
E ret=data[index];
for(int i=index+1;i<size;i++)
data[i-1]=data[i];
size--;
data[size]=null;//loitering objects!=memory leak if(size==data.length/2)
resize(data.length/2);
return ret;
}
//从数组中删除第一个元素,返回删除的元素
public E removeFirst(){
return remove(0);
}
//从数组中删除最后一个元素,返回删除的元素
public E removeLast(){
return remove(size-1);
}
//从数组中删除元素e
public void removeElement(E e){
int index=find(e);
if(index!=-1)
remove(index);
} //在第index个位置插入一个新元素e
public void add(int index,E e){ if(index<0||index>size)
throw new IllegalArgumentException("Add failed.Require index>=0 and index<=size.");
if(size==data.length)
resize(2*data.length);
for(int i=size-1;i>=index ;i--)
data[i+1]=data[i]; data[index]=e;
size++;
}
@Override
public String toString(){
StringBuilder res=new StringBuilder();
res.append(String.format("Array:size=%d,capacity=%d\n", size,data.length));
res.append('[');
for(int i=0;i<size;i++){
res.append(data[i]);
if(i!=size-1)//判断是否是最后一个元素
res.append(",");
}
res.append(']');
return res.toString();
}
//扩容
private void resize(int newCapacity){
E[] newData=(E[])new Object[newCapacity];
for(int i=0;i<size;i++)
newData[i]=data[i];
data=newData;
}

  测试:

public class Student {
private String name;
private int score; public Student(String studentName,int studentScore){
name=studentName;
score=studentScore;
}
public String toString(){
return String.format("Student(name:%s,score:%d)", name,score);
}
public static void main(String[] args){
Array<Student> arr=new Array<>();
arr.addLast(new Student("Alice", 100));
arr.addLast(new Student("Bob", 66));
arr.addLast(new Student("CharLie", 88));
System.out.println(arr);
}
}

  

JAVA 数据类型数组的更多相关文章

  1. 回顾java基础—Java数据类型

    1  java数据类型.8种基本类型,3种引用类型 基本类型(也称:原始类型):byte.short.int.long.char.float.double.boolean 引用类型:类,接口,数组 2 ...

  2. 多态、GC、Java数据类型

    多态 一.java中实现多态的机制是什么? 靠的是: 父类定义的引用变量可以指向子类的实例对象,或者接口定义的引用变量可以指向具体实现类的实例对象 而程序调用的方法,在运行期才动态绑定, 它就是引用变 ...

  3. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  4. java 获取数组(二维数组)长度实例程序

    我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; ...

  5. java对象数组

    问题描述:     java 对象数组的使用 问题解决: 数组元素可以是任何类型(只要所有元素具有相同的类型) 数组元素可以是基本数据类型 数组元素也可以是类对象,称这样的数组为对象数组.在这种情况下 ...

  6. java数据类型图:

    java数据类型图:                                 ┏数值型━┳━整数型:byte short int long               ┏基本数据类型━━┫   ...

  7. Java方法-数组

    [Java数组] 1. 用sort()方法对Java数组进行排序,及如何使用 binarySearch() 方法来查找数组中的元素 binarySearch() 返回值: 如果它包含在数组中,则返回搜 ...

  8. java数据类型学习

    java数据类型基本分为两类: 一类为基本数据类型: 数值类型: 整数类型:byte.short.int.long 浮点类型:float.double 字符类型:char 布尔类型:boolean 一 ...

  9. java学习——数组

    元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; array 为引用数据类型|-数组数据类型 | 内存结构:程序在运行时,需要在内存中的分配空间.为了提高运行的效率,有对空间进行不同 ...

随机推荐

  1. cartographer 分析

    原文链接:http://blog.csdn.net/zyh821351004/article/details/52421005 cartographer与karto的比较 1. 两者采取的都是图优化框 ...

  2. 【转】Python 面向对象(初级篇)

    [转]Python 面向对象(初级篇) 51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...

  3. Python运维开发基础03-语法基础 【转】

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...

  4. frei0r-1.6.1 for win32 133 DLLs

    ffmpeg中frei0r滤镜基本使用方法 ffplay -vf frei0r=filter_name=filter_params:filter_params:... 在Windows系统ffmpeg ...

  5. 判断鼠标进入容器的方向小Demo

    参考资料: 贤心博客:http://sentsin.com/web/112.html, Math.atan2(y,x) 解释 :http://www.w3school.com.cn/jsref/jsr ...

  6. VI编辑器、ipython、jupyter及进程知识总结

    一.VI编辑器 1.三种模式 一般模式(normal mode 默认) 插入模式(insert mode) 末行模式(last line mode) 2.模式切换 一般模式-------------- ...

  7. bootstrap DataTable绑定数据带服务器分页

    <!-- DataTables -->  这两个文件在我的文件夹里面<script src="~/bower_components/datatables.net/js/jq ...

  8. workflow的简介

    工作流(Workflow) 是对工作流程及其各操作步骤之间业务规则的抽象.概括描述.工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算. 工作流要 ...

  9. liunx 安装redis 4.0

    liunx 上安装redis 4.0.1 第一步:将 redis-4.0.1.tar.gz 压缩问上传至/home目录下 第二步: 解压文件  tar -zxvf  redis-4.0.1.tar.g ...

  10. Confluence 6 为搜索引擎隐藏外部链接

    为搜索引擎隐藏外部链接能够避免向你的站点添加垃圾信息.如果你启用了这个选项的话,任何插入到页面中的 URLs 和评论将会赋予 'nofollow' 属性,这个属性将会禁止搜索引擎进行索引.  快捷链接 ...