基于数组(对象):可以保存多个不同类型的数据

package cn.itsource.arryslist;

import java.util.Arrays;

/**
 * 基于数组,适用于查改。
 * 增删插效率低下
 *				1. 请设计一个类ArrayListDemo,可以装多个不同类型的数据,初始长度是10个
 *					底层是基于数组,因为是可以装不同数据类型的数据,所以是Object数组
 *					int/byte/short /boolean....
 *					Object[] value = new Object[10];
 *					value[0] = 1;//int 的1装好为对应的包装类Integer
 *
 *				2. 可以记录当前数据的个数 int size()
 *					
 *				3. 可以任意添加任意类型的数据 void add(Object obj)
 *						version2 自动扩容
 *
 *				4. 可以打印当前数据结构的对象,格式如下:[值1,值2.。。。。]
 *
 *				5. 查询指定下标的元素  Object searchByIndex(int index)
 *				6. 查询指定的元素第一次出现的位置  int searchByElement(Object ele);
 *
 *				7. 修改指定下标处的元素  void updateByIndex(int index,Object obj)
 *				8. 删除指定下标处的元素,返回删除的元素  	Object deleteByIndex(int index)
 *				9. 删除的首次出现的指定元素     void deleteByElement(Object ele)
 *				10.插入指定下标处一个指定元素 void insertByIndex(int index,Object obj)
 *					
 *				11.将对象中所有元素清空 void clear();
 *				12.可以创建指定长度的ArrayList对象
 *				13.创建一个默认长度是10的ArrayList对象
 *				14.创建一个默认长度是10,且有指定元素的ArrayList对象
 */
public class ArraysList {
	
	
	
	/**声明一个成员变量的数组,并给10的长度*/
	private Object[] value=new Object[10];
	/**声明一个成员变量size 用来存储元素*/
	private int size;
	//2. 可以记录当前数据的个数 int size()
	public int size() {
		return size;
	}
	
	/**
	 * 3. 可以任意添加任意类型的数据 void add(Object obj)version2 自动扩容
	 * @param obj
	 */
	public  void add(Object obj) {
		selaDilatation();
		value[size]=obj;
		size++;
		
	}


	/**
	 * 4. 可以打印当前数据结构的对象,格式如下:[值1,值2.。。。。]
	 */
	@Override
	public String toString() {
		Object[] copyOf = Arrays.copyOf(value, size);	
		return Arrays.toString(copyOf);
	}
	
	/**
	 * 5. 查询指定下标的元素  Object searchByIndex(int index)
	 * @param index
	 * @return
	 */
	public Object searchByIndex(int index){
		seleIndex(index);
		return value[index];
	}

	
	/**
	 * 6. 查询指定的元素第一次出现的位置  int searchByElement(Object ele);
	 * @param ele
	 * @return
	 */
	public int searchByElement(Object ele){
		if (ele==null) {
			for (int i = 0; i < value.length; i++) {
				if (ele==value[i]) {
					return i;
				}
			}
		}else {
			for (int i = 0; i < value.length; i++) {
				if (ele.equals(value[i])) {
					return i;
				}
			}
		}
		return -1;
	}
	
	/**
	 * 7. 修改指定下标处的元素  void updateByIndex(int index,Object obj)
	 * @param index
	 * @param obj
	 */
	public  void updateByIndex(int index,Object obj){
		seleIndex(index);
		value[index]=obj;
	}
	
	/**
	 * 8. 删除指定下标处的元素,返回删除的元素  	Object deleteByIndex(int index)
	 * @param index
	 * @return
	 */
	public Object deleteByIndex(int index){
		seleIndex(index);
		Object obj=value[index];
		System.arraycopy(value, index+1, value, index, size-index-1);
		size--;
		return obj;
	}
	
	/**
	 * 9. 删除的首次出现的指定元素     void deleteByElement(Object ele)
	 * @param ele
	 */
	public void deleteByElement(Object ele){
		int searchByElement = searchByElement(ele);
		if (searchByElement==-1) {
			System.out.println("数组中没有"+ele);
			return;
		}
		deleteByIndex(searchByElement);
	}
	
	/**
	 * 10.插入指定下标处一个指定元素 void insertByIndex(int index,Object obj)
	 * @param index
	 * @param obj
	 */
	public void insertByIndex(int index,Object obj){
		if (index<0||index>size) {
			throw new ArrayIndexOutOfBoundsException("插入的下标不合法,可插入范围[0,"+size+"]"); 
		}
		if (index==size) {
			add(obj);
			return;
		}else{
			selaDilatation();
			System.arraycopy(value, index, value, index+1, size-index);
			value[index]=obj;
			size++;
		}
		
		
	}
	
	/**
	 * 11.将对象中所有元素清空 void clear();
	 */
	public void clear() {
		Arrays.fill(value, "null");
	}
	/**
	 * 12.可以创建指定长度的ArrayList对象
	 * @param length
	 */
	public ArraysList(int length){
		super();
		value=new Object[length];
	}
	
	/**
	 * 13.创建一个默认长度是10的ArrayList对象
	 */
	public ArraysList(){
		this(10);
	}
	
	/**
	 * 14.创建一个默认长度是10,且有指定元素的ArrayList对象
	 * @param obj
	 */
	public ArraysList(Object obj){
		this(10);
		add(obj);
	}
		
	/**
	 * 当数组长度不够装数据时自动扩容
	 */
	private void selaDilatation() {
		if (size ==value.length) {
			value = Arrays.copyOf(value, value.length*2);
		}
	}
	/**
	 * 判断数组下标是否越界
	 * @param index
	 */
	private void seleIndex(int index) {
		if (index <0||index >size-1) {
			throw new ArrayIndexOutOfBoundsException("数组下标越界,下标范围[0,"+(size-1)+"]");
		}
	}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值