JAVA 数据类型数组
普通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 数据类型数组的更多相关文章
- 回顾java基础—Java数据类型
1 java数据类型.8种基本类型,3种引用类型 基本类型(也称:原始类型):byte.short.int.long.char.float.double.boolean 引用类型:类,接口,数组 2 ...
- 多态、GC、Java数据类型
多态 一.java中实现多态的机制是什么? 靠的是: 父类定义的引用变量可以指向子类的实例对象,或者接口定义的引用变量可以指向具体实现类的实例对象 而程序调用的方法,在运行期才动态绑定, 它就是引用变 ...
- Java中数组的特性
转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...
- java 获取数组(二维数组)长度实例程序
我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; ...
- java对象数组
问题描述: java 对象数组的使用 问题解决: 数组元素可以是任何类型(只要所有元素具有相同的类型) 数组元素可以是基本数据类型 数组元素也可以是类对象,称这样的数组为对象数组.在这种情况下 ...
- java数据类型图:
java数据类型图: ┏数值型━┳━整数型:byte short int long ┏基本数据类型━━┫ ...
- Java方法-数组
[Java数组] 1. 用sort()方法对Java数组进行排序,及如何使用 binarySearch() 方法来查找数组中的元素 binarySearch() 返回值: 如果它包含在数组中,则返回搜 ...
- java数据类型学习
java数据类型基本分为两类: 一类为基本数据类型: 数值类型: 整数类型:byte.short.int.long 浮点类型:float.double 字符类型:char 布尔类型:boolean 一 ...
- java学习——数组
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; array 为引用数据类型|-数组数据类型 | 内存结构:程序在运行时,需要在内存中的分配空间.为了提高运行的效率,有对空间进行不同 ...
随机推荐
- Wasserstein CNN: Learning Invariant Features for NIR-VIS Face Recognition
承接上上篇博客,在其基础上,加入了Wasserstein distance和correlation prior .其他相关工作.网络细节(maxout operator).训练方式和数据处理等基本和前 ...
- Linux虚拟机安装及环境搭建
1.下载centos,地址:https://www.centos.org/download/ 下载时选择DVD ISO 2.使用VMware Workstation进行安装. 3.虚拟机网络配置 ...
- Linux动态库的编译与使用 转载【转】
转自:http://www.cnblogs.com/leaven/archive/2010/06/11/1756294.html http://hi.baidu.com/linuxlife/blog/ ...
- requests支持socks5代理了
记录下 以前: import socket import socks from requests_html import HTMLSession session=HTMLSession() socks ...
- makefile实例
#.PHONY:cleanall cleanobj cleandiff #cleanall:cleandiff cleanobj # rm program #cleanobj: # rm obj.c ...
- ES--05
第四十一讲!分词器内部组成 内置分词器 课程大纲 1.什么是分词器 切分词语,normalization(提升recall召回率) 给你一段句子,然后将这段句子拆分成一个一个的单个的单词,同时对每个单 ...
- $Django 在线文本编辑器skindeditor
简介 KindEditor是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富 ...
- POJ 3723
最大生成树 #include<iostream> #include<cstdio> #include<cstring> #include<set> #i ...
- 前端----css的继承性和层叠性
css有两大特性; 继承性和层叠性 继承性 继承:给父级设置一些属性,子级继承了父级的该属性, 这就是我们的css中的继承, 需要注意的是 有一些属性是可以继承下来的: color , font ...
- Hystrix系列-5-Hystrix的资源隔离策略
转自:https://blog.csdn.net/liuchuanhong1/article/details/73718794 Hystrix的资源隔离策略有两种,分别为:线程池和信号量. 说到资源隔 ...