java基础之数组,int[]和ArrayList

开始学java的时候,对于 int[] 和ArrayList总是懵懵懂懂的,不知道啥时候用哪个。现在终于了解了,总结一下跟大家分享一下

int[]数组

  • 创建
    // 方式一:创建一个固定的数组
    int arr1 = {1,2,3,4,5};
    // 方式二:创建一个长度为10的数组
    double[] arr1 = new double[10];
    // 方式三:创建一个固定数组
    char[] arr = new char[] {1,2,3};
    
  • 特点

    1、长度在创建初期确定,且不可变动
    2、添加的内容只能为基本类型

ArrayList集合

  • 特点

    1、ArrayList是集合的一个实现类
    2、ArrayList内部封装了一个Object类型的对象,初始长度为10,且长度可变
    3、ArrayList集合的查询快,但是增删慢
    4、线程不安全

  • 创建
    // ArrayList可传各种类型数据
    ArrayList<T> arr = new ArrayList<>();
    

int[] 和ArrayList的对比(也可以是char[] 、double[]~~)

功能int[ ] arr=new int[5];ArrayList array=new ArrayList();
长度不可变可变,动态扩容
获取长度arr.lengtharray.size()
末尾添加-arr.add(element)
指定位置添加-array.add(index,element)
存入数据基本类型任意类型,一般结合泛型使用
返回某个位置的值arr[index]array.get(index)
更改某个位置的值arr[index]=element;array.set(index,element);
判空-array.isEmpty();返回的是boolean类型
是否包含某个元素-array.contains(element);返回的是boolean类型
移除指定位置元素-array.remove(index),返回的是被删除的值
迭代-Iterator ite = list.iterator(); //将List集合中元素转到iterator变量中。
ite.hasNext()
int[ ] 转ArrayList-Arrays.asList(int[]);
ArrayList转 int[ ]array.toArray();-

数组扩容(直接上图)

在这里插入图片描述

学会了扩容,那么我们用int[]来实现一个ArrayList

	public class ArrayList {
	int size; //有效数组长度,即将要插入的位置的下标
	int capacity; // 数组容量
	double factor; // 因数,即扩容的因数
	int[] arr;  //数组
	
	// 构造函数
	public ArrayList() {
		size = 0;
		capacity = 10;
		factor = 1.5;
		arr = new int[capacity];
	}
	
	// 添加
	public void add(int element) {
		// 先判断数组是不是满了(有效长度是不是超过了数组的长度)
		if(size>=arr.length) {
			capacity *=factor;
			int[] temp = new int[capacity];
			for(int i=0;i<arr.length;i++) {
				temp[i]=arr[i];
			}
			arr = temp;
		}
		// 添加数组后,size需要指向下一个位置,所以别忘了++
		arr[size]= element;
		size++;
	}
	
	
	// 插入
	public void insert(int element,int index) {
		// 先判断index的值是否合法
		if(index<0 || index>size) {
			System.out.println("位置"+index+"不可插入");
		}else {
			// 先判断数组是不是满了
			if(size>=arr.length) {
				capacity *=factor;
				int[] temp = new int[capacity];
				for(int i=0;i<arr.length;i++) {
					temp[i] = arr[i];
				}
				arr = temp;
			}
			// 没满的话,执行插入
			// 插入时未避免数据丢失,从后往前插入
			for(int i=size-1;i>=index;i--) {
				arr[i+1] = arr[i];
			}
			// 数据移完之后,对插入位置进行赋值
			arr[index] = element;
			size++;
		}
	}

	// 删除
	public void delete(int element) {
		int count = 0; 
		// 从后往前遍历,这样可以确认不会漏删
		for(int i=size-1;i>=0;i--) {
			// 找到了要删除的值了
			if(arr[i]==element) {
				// 从这个位置开始遍历,把后一位的值移动到前一位
				for(int j=i+1;j<size;j++) { // 从i+1位置开始,将当前值赋值给前一个数
					arr[j-1] = arr[j];
				}
				// 删除后,有效长度要减少
				size--;
				// 记录查找此处
				count++;
			}
			
		}
		// flag=false说明没有找到
		if(count==0) {
			System.out.println("未找到"+element);
		}
	}
	
	
	// 修改
	public void update(int index,int element) {
		if(index<0 || index>size) {
			System.out.println("位置"+index+"不合法");
		}else {
			arr[index] = element;
		}
	}
	
	// 清空
	public void clear() {
		// arr指向新创建的长度为10的数组,同时将
		capacity = 10;
		arr = new int[capacity];
		size = 0;
	}
	
	// 重写toString方法
	@Override
	public String toString() {
		String s = "[";
		// 针对清空列表的操作,列表清空后,size=0
		if(size==0) {
			return s+"]";
		}else {
			for(int i=0;i<size-1;i++) {
				s+=arr[i]+", ";
			}
			s+=arr[size-1];
			s+="]";
			return s;
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值