概念:把数据码成一排进行存放。
代码:
package com.company;
public class Array<泛型> {
private 泛型[] data;
private int size;
public Array(int capacity){
data = (泛型[])new Object[capacity];
size = 0;
}
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){
this.add(size, e);
}
//在第一位插入
public void addFirst(泛型 e){
add(0, e);
}
//在某一位插入
public void add(int index, 泛型 e){
if (size == data.length){
resize(2 * data.length);
}
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++;
}
//获取index索引位置的元素
public 泛型 get(int index){
if (index<0 || index>=size){
throw new IllegalArgumentException("Get failed. Index is illegal");
}
return data[index];
}
//修改index索引位置的元素
public void set(int index,泛型 e){
if (index<0 || index>=size){
throw new IllegalArgumentException("Set failed. Index is illegal");
}
data[index] = e;
}
//查看数组中是否有元素e
public boolean contains(泛型 e){
for(泛型 i : data){
if (i.equals(e)){
return true;
}
}
return false;
}
//查找数组中元素e所在索引,如果不存在元素e,则返回-1
public int find(泛型 e){
for (int i = 0 ; i<size ; i++){
if (data[i].equals(e)){
return i;
}
}
return -1;
}
//从数组中删除index位置的元素,返回删除的元素
public 泛型 remove(int index){
if (index<0 || index>=size){
throw new IllegalArgumentException("Set failed. Index is illegal");
}
泛型 ret = data[index];
for (int i = index+1; i<size; i++){
data[i-1] = data[i];
}
size--;
//data[size] = null;
if (size == data.length / 4 && data.length /2 != 0){
resize(data.length / 2);
}
return ret;
}
//删除第一个元素,返回删除的元素
public 泛型 removeFirst(){
return remove(0);
}
//删除最后一个元素,返回删除的元素
public 泛型 removeLast(){
return remove(size-1);
}
//从数组中删除元素e
public void removeElement(泛型 e){
int index = find(e);
if (index != -1){
remove(index);
}
}
@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){
泛型[] newData = (泛型[]) new Object[newCapacity];
for (int i = 0; i<size; i++){
newData[i] = data[i];
}
data = newData;
}
}
package com.company;
public class Main {
public static void main(String[] args) {
/*静态数组:
int[] arr = new int[10];
for (int i : arr)
System.out.println(i);
System.out.println("--------------------------------------");
int[] scores = new int[]{100, 99, 66};
for (int i : scores)
System.out.println(i);
System.out.println("-------------------------------------------");
scores[0] = 98;
for (int i : scores)
System.out.println(i);
System.out.println("-------------------------------------------");*/
//动态数组:
Array<Integer> arr2 = new Array<>();
for (int i=0; i<10; i++){
arr2.addLast(i);
}
System.out.println(arr2);
arr2.add(1, 100);
System.out.println(arr2);
arr2.remove(2);
arr2.removeElement(4);
arr2.removeElement(0);
System.out.println(arr2);
}
}
一维数组
可以存放上千万个数据,并且这些数据类型是相同的。
声明数组格式:
//方式一:
int a[];
a = new int[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
//方式二:
int a[] = new int[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
//方式三:
int a[] = {0 , 1, 2};
相关的API方法
拷贝
public class ShuZuKaoBei {
public static void main(String[] args) {
int a1[] = {1,2,3,4,5};
int a2[] = {9,8,7,6,5,4,3};
System.arraycopy(a1, 0, a2, 0, 3);//执行数组拷贝的操作
System.out.print("a1数组中的内容:");
for (int a : a1) {
System.out.print(a + " ");
}
System.out.println();
System.out.print("a2数组中的内容:");
for (int a : a2) {
System.out.print(a + " ");
}
System.out.println("\n 数组拷贝完成!");
}
}
//输出内容:
a1数组中的内容:1 2 3 4 5
a2数组中的内容:1 2 3 6 5 4 3
数组拷贝完成!
System.arraycopy(source,0,dest,0,x):
复制源数组从下标0开始的x个元素到目标数组,从目标数组的下标0所对应的位置开始存取。
排序
public class ShuZuPaiXu{
public static void main(String[] args){
int a[] = {4,32,45,32,65,32,2};
System.out.print("数组排序前的顺序:");
for (int aa : a){
System.out.print(a + " ");
}
Arrays.sort(a);//数组的排序方法
System.out.print("\n 数组排序后的顺序");
for (int aa : a){
System.out.print(a + " ");
}
}
}
//输出内容:
数组排序前的顺序:4 32 45 32 65 32 2
数组排序后的顺序:2 4 32 32 32 45 65
Arrays.sort(数组名):
数组的排序方法,在java.util包里,使用的时候需要先导入。