普通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. Dubbo--基于Zookeeper服务与Spring集成

    Dubbo Zookeeper Spring  1.部署dubbo服务管理中心 2.搭建dubbo服务环境 2.1 pom.xml 依赖 2.2 log4j.properties 日志打印 3.api ...

  2. js中 && 和 || 的用法

    js中的&& 和 || 一直以为是php那一套,上网查了一些资料,才发现不一样 a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行 ...

  3. LwIP Application Developers Manual5---高层协议之DHCP,AUTOIP,SNMP,PPP

    1.前言 本文主要讲述高层协议,包括DHCP 2.DHCP 2.1 从应用的角度看DHCP 你必须确保在编译和链接时使能DHCP,可通过在文件lwipopts.h里面定义LWIP_DHCP选项,该选项 ...

  4. k64 datasheet学习笔记52---Universal Asynchronous Receiver/Transmitter (UART)

    1.前言 UART实现与外设或CPU的通信 2. UART概述 2.1基本特性 (1)Full-duplex operation (2)Standard mark/space non-return-t ...

  5. c++学习day3(字符串_指针)

    1.字符串 1)三种形式 用双引号括起来的字符串常量:结尾会有一个'\0'字符,但该字符只占据字节数,不会使字符串长度增加. 存放于字符数组中,以'\0'字符结尾:数组元素个数应至少为字符串长度+1 ...

  6. 安装mongo php拓展

    下载php_mongo.dll文件 下载地址:https://s3.amazonaws.com/drivers.mongodb.org/php/index.html(注意对应版本及是否线程安全)需要注 ...

  7. QT 开发小记

    1.开发socket网络通信时,需要在.pro 文件中添加 network项 QT       +=  network 2. 报错: mutilple definition of  时,查看 .pro ...

  8. MySQL基本语句、存储引擎

    数据库服务器中存放的是 库(文件加) 表(文件) 表里面是记录(一行数据)quit or  exit 退出客户端\s \c  \G 库(文件)    创建        create database ...

  9. Linq与Lambda常用查询语法

    1.查询全部 2.按条件查询全部 3.去除重复 4.连接查询    between and 5.排序 6.分组

  10. groupID和artifactID填什么

    Maven的pom.xml文件中的groupID和artifactID: GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构.ArtifactID就是 ...