ArrayList与LinkedList基础

在讲ArrayList和LinkedList之前,应该对他们的底层数据结构要有一些了解。所有先弄懂什么是数组,链表和队列。

1.数组

        数组是一组相同数据类型数据的容器。创建一个数组类似于在内存中分配了多个大小相同的格子。

public class Test {
    // 创建数组
    public static void main(String[] args) {
            // 直接声明
            String[] arr;
            // 给定数组维但不赋值
            String[] arr1 = new String[5];
            // 给数组赋值
            String[] arr2 = new String[] {"123", "456", "789"};
            String[] arr3 = {"123", "456", "789"};

    }

}

2.链表

         链表在内存中的表现为离散的数据块,在逻辑上表现为线性的。

// 链表节点类
public class MyNode<E> {
    E val;
    MyNode<E> next;
    public MyNode(E val, MyNode<E> next) {
        this.val = val;
        this.next = next;        
    }
}

// 链表类
public class MyList<E> {
    MyNode<E> root;
    MyNode<E> tail;
    
    public void add(E obj) {
        if (root == null) {
            MyNode<E> node = new MyNode<E>(obj, null);
            root = node;
            tail = node;
        } else {
            MyNode<E> node = new MyNode<E>(obj, null);
            tail.next = node;
            tail = node;
        }        
    }    
} 
public class Test {

    public static void main(String[] args) {
        MyList<Integer> list = new MyList<Integer>();
        list.add(123);
        list.add(456);
        System.out.println(list.root.val);

    }

}   

  E:泛型数据类型,类似于宏,对出现的数据设置规定数据类型。

3.队列

        1)用数组实现

public class ArrQueue {
    Object[] DataQueue = new Object[0];
    int size = 0;
    public void add(Object data) {
        size += 1;
        if (size > DataQueue.length) {
            Object[] arr = new Object[size + size / 2 + 1];
            for (int i = 0; i < DataQueue.length; i++) {
                arr[i] = DataQueue[i];
            }
            arr[size - 1] = data;
            DataQueue = arr;
        } else {
            DataQueue[size - 1] = data;
        }
    }
}

public class main {
    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            qu.add("num"+i);
        }
        for (int i = 0; i < 10000; i++) {
            System.out.println(qu.DataQueue[i]);
        }
    }
}

        2)用链表实现 

package DataStructure.Queue.LinkedQueue;

public class MyList<E> {
    ListNode<E> Head = new ListNode<E>(null, null);
    ListNode<E> head = Head, tail = Head;
    int size = 0;
//    ListNode[] ListArray;
    public ListNode<E> create(int n) {
        if (n < 0) {
            System.out.println("ERROR");
            return null;
        }
        if (n == 0) return head;
        if (n == 1) {
            ListNode<E> node = new ListNode<>(null, null);
            head.next = node;
            tail = node;
            return head;
        }
        ListNode<E> node1 = new ListNode<E>(null, null);
        head.next = node1;
        tail = node1;
        for (int i = 1; i < n; i++) {
            ListNode<E> node_ = new ListNode<E>(null, null);
            tail.next = node_;
            tail = node_;
        }
        size = n;
        return head;
    }

    public void add(String value) {
        ListNode<E> node = new ListNode<>(value, null);
        tail.next = node;
        tail = node;
        size += 1;
    }
    public void delete(int index) {
        if (size == 0 || index < 0 || index >= size) {
            System.out.println("ERROR");
            return ;
        }
        ListNode<E> p = head;
        if (index == 0) {
            p.next = p.next.next;
            size -= 1;
            return ;
        }
        for (int i = 0; i < index; i++) {
            p = p.next;
        }
        p.next = p.next.next;
        size -= 1;
    }
    public void change(String value, int index) {
        if (index < 0 || index >= size) return ;
        ListNode<E> p = head;
        for (int i = 0; i <= index; i++) {
            p = p.next;
        }
        p.ob = value;
    }
    public void insert(String value, int index) {
        if (index < 0) return ;
        if (index >= size) {
            add(value);
            return ;
        }
        ListNode<E> node = new ListNode<>(value, head.next);
        if (index == 0) {
            head.next = node;
            return ;
        }
        ListNode<E> p = head;
        for (int i = 0; i < index; i++) {
            p = p.next;
        }
        p.next = node;
    }
    public void print(ListNode<String> p) {
        if (p.next == null) return ;
        System.out.println(p.next.ob);
        print(p.next);
    }

    public int size() {
        return size;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值