zoukankan      html  css  js  c++  java
  • 44 容器(三)——ArrayList索引相关方法

    方法都比较简单,这里列出来即可:

    • add(index,ele) //忘制定下标插入元素
    • add(ele) 
    • addAll(Collection <C> c) 泛型必须与调用add的泛型保持一致
    • set(index,ele)
    • remove(index)
    • remove(Object)
    • removeAll(Collection<C> c) 移除交集元素
    • get(index) 返回制定下标的元素
    • indexOf(Object o) 返回指定元素第一次出现所在的下标(正序)
    • lastIndexOf(Object o ) 返回指定元素第一次出现所在的下标(倒叙)
    • contains(Object) 是否包含某个元素
    • containsAll(Collection<C> c)是否包含某个集合
    • retainAll(Collection<C> c)保留两个集合的交集
    • toArray() 返回一个Object[]数组
    • clear() 清空集合

    手写ArrayList

    重点强调

    • ArrayList的底层是数组
    • 使用泛型
    • 删除元素的方法使用System.arraycopy()来覆盖原数组
    package _20191209;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * 手写ArrayList v1.0
     * 初始化、add、toString、get、remove方法
     * @author TEDU
     *
     */
    public class MyArrayList<E> {
    	//成员变量
    	private Object[] datas;//底层数组
    	private static final int DEFAULT_CAPACITY = 10;//初始容量
    	private static int used = 0;//当前数组中已被填充的个数
    	private static int size = DEFAULT_CAPACITY;//数组实际大小
    	//初始化
    	public MyArrayList() {
    		datas = new Object[DEFAULT_CAPACITY];
    	}
    	public MyArrayList(int size) {//自定义容器大小
    		this.size = size;
    		datas = new Object[size];
    	}
    	//、add
    	public void add(E e) {
    		if(used < size) {
    			datas[used++] = e;
    		}else {
    			size += (size>>1);
    			datas = Arrays.copyOf(datas,size);
    		}
    	}
    	//、toString
    	@Override
    	public String toString() {
    		StringBuffer sb = new StringBuffer();
    		sb.append("[");
    //		for(Object o : datas) {
    //			sb.append(o+",");
    //		}
    		for (int i = 0; i < used; i++) {
    			if(i!=used-1) {
    				sb.append(datas[i]+",");
    			}else {
    			sb.append(datas[i]);
    			}
    		}
    		sb.append("]");
    		return sb.toString();
    	}
    	
    	
    	
    	//、get
    	public E get(int index) {
    		return (E) datas[index];
    	}
    	
    	//set
    	public boolean set(int index,E element) {
    		if(index >= used) {
    			return false;
    		}
    		datas[index] = element;
    		return true;
    	}
    	
    	//、remove方法,移除后used要减一
    	public boolean remove(int index) {
    		if(index >= used) {
    			return false;
    		}
    		//使用arrycopy很方便
    		System.arraycopy(datas, index+1, datas, index, (used--)-index);
    		return true;
    	}
    	public boolean remove(E element) {
    		for (int i = 0; i < used; i++) {
    				if(((E)datas[i]).equals(element)) {
    				remove(i);
    				return true;
    			}
    		}
    		return false;
    	}
    	
    	//indexOf 返回第一个匹配的元素所在下标,如元素不存在返回-1
    	public int indexOf(E element) {
    		for (int i = 0; i < used; i++) {
    			if(((E)datas[i]).equals(element)) {
    				return i;
    			}
    		}
    		return -1;
    		
    	}
    	
    	//lastIndexOf
    	public int lastIndexOf(E element) {
    		for (int i = used-1; i >= 0; i--) {
    			if(((E)datas[i]).equals(element)) {
    				return i;
    			}
    		}
    		return -1;
    	}
    	
    	//size返回集合大小
    	public int size() {
    		return used;
    	}
    	
    	//clear 清空集合
    	public void clear() {
    		datas = new Object[DEFAULT_CAPACITY];
    		used = 0;
    	}
    	
    	
    	
    	//测试
    	public static void main(String[] args) {
    		MyArrayList<Integer> ml = new MyArrayList<>();
    //		Scanner scan = new Scanner(System.in);
    //		String str = "";
    //		while(!str.contentEquals("-1")) {//输出-1推出循环
    //			System.out.println("请添加:");
    //			str = scan.nextLine();
    //			if(str.contentEquals("-1")) return;
    //			ml.add(str);
    //			System.out.println(ml);;
    //		}
    		//手写版ArrayList
    		System.out.println("----------手写版ArrayList---------------");
    		ml.add(123);
    		ml.add(12);
    		System.out.println(ml);
    		System.out.println(ml.size());
    		ml.set(1, 33);
    		System.out.println(ml);
    		ml.remove(1);
    		System.out.println(ml);
    		ml.add(66);
    		ml.add(13);
    		System.out.println(ml);
    		ml.remove((Integer)66);//直接输入66会被认为是下标66的元素
    		System.out.println(ml);
    		System.out.println(ml.indexOf((Integer)123));
    		ml.add(123);
    		System.out.println(ml.lastIndexOf((Integer)123));
    		ml.clear();
    		System.out.println(ml);
    		System.out.println(ml.size());
    		
    		//正版ArrayList测试
    		System.out.println("---------------以下为正版ArrayList-----------------");
    		List<Integer> arrayList = new ArrayList<>();
    		arrayList.add(123);
    		arrayList.add(12);
    		System.out.println(arrayList);
    		System.out.println(arrayList.size());
    		arrayList.set(1, 33);
    		System.out.println(arrayList);
    		arrayList.remove(1);
    		System.out.println(arrayList);
    		arrayList.add(66);
    		arrayList.add(13);
    		System.out.println(arrayList);
    		arrayList.remove((Integer)66);//直接输入66会被认为是下标66的元素
    		System.out.println(arrayList);
    		System.out.println(arrayList.indexOf((Integer)123));
    		arrayList.add(123);
    		System.out.println(arrayList.lastIndexOf((Integer)123));
    		arrayList.clear();
    		System.out.println(arrayList);
    		System.out.println(arrayList.size());
    		
    	}
    }
    

      

      

  • 相关阅读:
    Python——协程
    Linux——raid介绍
    Linux——网关介绍
    Linux——inode节点介绍
    算法:排序加二分查找
    Mysql主从复制作用和工作原理详解
    Selenium中错误:selenium.common.exceptions.ElementClickInterceptedException: Message: element click inte
    redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a byte, string or number first
    Python之requests错误Expecting value: line 1 column 1 (char 0)
    简述cookies和session的区别
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12013061.html
Copyright © 2011-2022 走看看