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));
        }
  • 相关阅读:
    Nodejs exec和spawn的区别
    VC++每个版本对应的库
    在cmd启动一个win32程序,printf把信息输出到启运它的那个CMD窗口
    window 控制台解决中文乱码
    NW.js 桌面应用程序
    C++ Addon Async 异步机制
    Node bak
    nodejs electron 创建桌面应用
    跨平台桌面程序框架Electron
    js post 下载文件
  • 原文地址:https://www.cnblogs.com/zuge/p/5856373.html
Copyright © 2011-2022 走看看