容器剖析

主要用于容器类的遍历
容器:不用关心数组的边界问题,动态扩展。
这里写图片描述

所有的容器类都实现Collection或Map接口,用Iterator迭代器进行元素得带,且java中提供了容器的工具类Collections和Arrays

模拟ArrayList类
ArrayList内部是数组

package test;
//手动写一个容器类,用数组模拟
public class ArrayList {

    //数组大小为10,当数组中装满时,扩展空间,这样就可以实现无限多个
    Object[] objects=new Object[10];
    //index记录装了多少个对象
    int index;

    //添加对象
    public void add(Object o){
        if(index==objects.length){
            //当现有数组满了就创建一个新的数组对象,这个数组对象创建 
            //为多大,java内部会有一个加权算法
            Object[] newObjects=new Object[objects.length*2];
            //把原数组内容copy到新数组中
            System.arraycopy(objects, 0, newObjects, 0, objects.length);
            //元素组引用指向新数组
            objects=newObjects;
        }
        objects[index]=o;
        index++;
    }   
    //容器已装元素的个数,添加的时候就记录,而不是要得到size的时候还得遍历
    public int size(){
        return index;
    }
}

用链表模拟容器
链表包含数据本身和执行下一个节点的引用
这里写图片描述
1、Node对象

package test;
public class Node {
    private Object data;//数据本身
    private Node next;//指向下一个节点 
    public Node(Object data, Node node) {
        super();
        this.data = data;
        this.next = node;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
    public Node getNext() {
        return next;
    }
    public void setNext(Node node) {
        this.next = node;
    }
}

2、LinkedList

package test;

public class LinkedList {

    Node head=null;//头节点
    Node tail=null;//尾节点
    int size=0;

    //添加
    public void add(Object o){
        Node n=new Node(o,null);
        //如果添加进入的节点是第一个节点,即为head和tail赋值
        if(head==null){
            head=n;
            tail=n;
        }
        //把尾节点tail指向新加入的节点
        tail.setNext(n);
        //新加入的节点变成尾节点
        tail=n;
        size++;
    }

    public int size(){
        return size;
    }
}

带泛型的容器
带泛型的容器,就只能往容器中装固定类型的元素,且取出元素的时候就需要强制类型转换
这里写图片描述

未完待续。。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值