zoukankan      html  css  js  c++  java
  • java学习容器

    自己模拟ArrayList:

     private Object[] elementData;
    
        private int size;
    
        // 可以指定集合大小,默认10
        public MyArrayList(int initialCapacity) {
        if (initialCapacity < 0) {
            try {
            throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
            } catch (Exception e) {
            e.printStackTrace();
            }
        }
        elementData = new Object[initialCapacity];
        }
    
        // 无参构造
        public MyArrayList() {
        this(10);
        }
    
        // 返回集合大小
        public int size() {
        return size;
        }
    
        // 返回集合大小
        public boolean isEmpty() {
        return size == 0;
        }
    
        // 根据索引获取对象
        public Object get(int index) {
        rangeCheck(index);
        return elementData[index];
        }
    
        // 添加元素
        public void add(Object object) {
        ensureCapacity();
        elementData[size++] = object;
        }
    
        // 根据索引删除
        public void remove(int index) {
        rangeCheck(index);
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index + 1, elementData, index, numMoved);
        elementData[--size] = null;
        }
    
        // 根据对象删除
        public void remove(Object object) {
        for (int i = 0; i < size; i++) {
            if (get(i).equals(object)) {
            remove(i);
            }
        }
        }
    
        // 替换
        public Object set(int index, Object object) {
        rangeCheck(index);
        Object oldValue = elementData[index];
        elementData[index] = object;
        return oldValue;
        }
    
        public void add(int index, Object obj) {
        rangeCheck(index);
        ensureCapacity(); // 数组扩容
        System.arraycopy(elementData, index, elementData, index + 1, size - index);
        elementData[index] = obj;
        size++;
        }
    
        // 数组扩容和数据的拷贝
        private void ensureCapacity() {
        if (size == elementData.length) {
            Object newArray[] = new Object[size * 2 + 1];
            System.arraycopy(elementData, 0, newArray, 0, elementData.length);
            elementData = newArray;
        }
        }
    
        // 封装判断index是否合法
        private void rangeCheck(int index) {
        if (index >= size) {
            try {
            throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
            } catch (Exception e) {
            e.printStackTrace();
            }
        }
        }
    
        public static void main(String[] args) {
        MyArrayList list = new MyArrayList();
        list.add("333");
        list.add("444");
        list.add("555");
        list.add("344433");
        list.add("222");
        list.add("666");
        list.remove("5");
        list.set(0, "4432432");
        list.add(5, "111");
        System.out.println(list.size);
        // System.out.println(list.get(6));
        }
  • 相关阅读:
    常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)
    禁用页面及页面所有frame内的右键菜单
    JS模态窗口返回值兼容问题解决方案
    winform登录时,在密码框按下回车,直接登陆
    C#中实现邮件发送功能
    CTFHub-彩蛋(持续更新~)
    CTFHub技能树-目录遍历
    免密钥方式登陆配置
    Ansible_Day1
    Python_Day2_共享你的代码
  • 原文地址:https://www.cnblogs.com/zuge/p/5856373.html
Copyright © 2011-2022 走看看