数组
1.基于Java中的数组,进行二次封装,制作我们自己的数组(可变数组)。
public class MyArray {
int size;//实际存放元素个数
int[] data;//数据容器
//构造函数
public MyArray(int capacity){
data = new int[capacity];
size = 0;
}
public MyArray(){
this(10);
}
//判断数组是否为空
public boolean isEmpty(){
return size==0;
}
//获取数组容量
public int getCapacity(){
return data.length;
}
//向数组指定位置添加元素
public void addElement(int index,int ele) throws Exception {
if(size==data.length){
throw new Exception("数组已满,不能再添加");
}
if(index<0 || index>size){
throw new Exception("数组下标越界");
}
for(int i=size-1;i>=index;i--){
data[i+1] = data[i];
}
data[index] = ele;
size++;
}
//向数组末尾添加元素
public void addLast(int ele)throws Exception{
/*if(size == data.length){
throw new Exception("数组已满");
}
data[size] = ele;
size++;*/
addElement(size,ele);
}
//向数组头部添加元素
public void addHead(int ele)throws Exception{
addElement(0,ele);
}
//获取指定位置的元素
public int getElementByIndex(int index)throws Exception{
if(index<0 || index>=size){
throw new Exception("下标越界");
}
return data[index];
}
//修改指定位置的元素
public void setElementByIndex(int index,int ele)throws Exception{
if(index<0 || index>=size){
throw new Exception("下标越界");
}
data[index] = ele;
}
//判断数组中是否包含指定元素
public boolean contain(int ele){
boolean flag = false;
for(int i=0;i<size;i++){
if(data[i]==ele){
flag = true;
break;
}
}
return flag;
}
//搜索指定元素的位置
public int findIndex(int ele){
int index = -1;
for(int i=0;i<size;i++){
if(data[i]==ele){
index = i;
break;
}
}
return index;
}
//删除指定位置的元素
public void removeElementByIndex(int index)throws Exception{
if(index<0 || index>=size){
throw new Exception("下标越界");
}
for(int i=index;i<size-1;i++){
data[i] = data[i+1];
}
data[size-1] = 0;
size--;
}
//删除指定元素
public void removeElement(int ele)throws Exception{
int index = findIndex(ele);
if(index != -1){
removeElementByIndex(index);
}
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("容量:"+getCapacity()+","+"实际存放元素个数为:"+size+"\n");
sb.append("[");
for(int i=0;i<size;i++){
sb.append(data[i]);
if(i != size-1){
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
public class Main {
public static void main(String[] args) throws Exception {
MyArray myArray = new MyArray(20);
for(int i=0;i<15;i++){
myArray.addLast(new Random().nextInt(100));
}
System.out.println(myArray);
myArray.addElement(2,10);
System.out.println(myArray);
myArray.setElementByIndex(3,11);
System.out.println(myArray);
}
}
2.泛型
在类名后加<>,<>中传入我们想要的类型,这里以T为示范,代码修改后如下:
public class MyArray<T> {
int size;//实际存放元素个数
T[] data;//数据容器
//构造函数
public MyArray(int capacity){
data = (T[]) new Object[capacity];
size = 0;
}
public MyArray(){
this(10);
}
//判断数组是否为空
public boolean isEmpty(){
return size==0;
}
//获取数组容量
public int getCapacity(){
return data.length;
}
//向数组指定位置添加元素
public void addElement(int index,T ele) throws Exception {
if(size==data.length){
throw new Exception("数组已满,不能再添加");
}
if(index<0 || index>size){
throw new Exception("数组下标越界");
}
for(int i=size-1;i>=index;i--){
data[i+1] = data[i];
}
data[index] = ele;
size++;
}
//向数组末尾添加元素
public void addLast(T ele)throws Exception{
/*if(size == data.length){
throw new Exception("数组已满");
}
data[size] = ele;
size++;*/
addElement(size,ele);
}
//向数组头部添加元素
public void addHead(T ele)throws Exception{
addElement(0,ele);
}
//获取指定位置的元素
public T getElementByIndex(int index)throws Exception{
if(index<0 || index>=size){
throw new Exception("下标越界");
}
return data[index];
}
//修改指定位置的元素
public void setElementByIndex(int index,T ele)throws Exception{
if(index<0 || index>=size){
throw new Exception("下标越界");
}
data[index] = ele;
}
//判断数组中是否包含指定元素
public boolean contain(T ele){
boolean flag = false;
for(int i=0;i<size;i++){
//此处==要使用equals代替
if(data[i].equals(ele)){
flag = true;
break;
}
}
return flag;
}
//搜索指定元素的位置
public int findIndex(T ele){
int index = -1;
for(int i=0;i<size;i++){
if(data[i].equals(ele)){
index = i;
break;
}
}
return index;
}
//删除指定位置的元素
public void removeElementByIndex(int index)throws Exception{
if(index<0 || index>=size){
throw new Exception("下标越界");
}
for(int i=index;i<size-1;i++){
data[i] = data[i+1];
}
data[size-1] = null;
size--;
}
//删除指定元素
public void removeElement(T ele)throws Exception{
int index = findIndex(ele);
if(index != -1){
removeElementByIndex(index);
}
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("容量:"+getCapacity()+","+"实际存放元素个数为:"+size+"\n");
sb.append("[");
for(int i=0;i<size;i++){
sb.append(data[i]);
if(i != size-1){
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
public class Main {
public static void main(String[] args) throws Exception {
// 此处除了八个基本类型外,任意类型都可以,八个基本类型使用包装类
MyArray<Integer> myArray = new MyArray<>(20);
for(int i=0;i<15;i++){
myArray.addLast(new Random().nextInt(100));
}
System.out.println(myArray);
myArray.addElement(2,10);
System.out.println(myArray);
myArray.setElementByIndex(3,11);
System.out.println(myArray);
}
}