容器Collection_Set_List_ArrayListJAVA099-102

来源:http://www.bjsxt.com/
1、S02E099_01容器Collection_Set_List接口介绍
Collection接口
——Set子接口
————HashSet
——List子接口
Map接口
——HashMap
(1)Collection常用方法:
int size()
boolean isEmpty()
boolean contains(Object o)是否包含某对象
Iterator iterator()迭代器,遍历容器
Object[] toArray()把容器内的对象放到object数组里
boolean add(E e)把对象放到容器中
boolean remove(Object o)从容器中移除
boolean containsAll(Collection)是否为子集(包含所有元素)
boolean addAll(Collection)加入所有对象
boolean removeAll(Collection)从容器中移除所有对象
boolean retainAll(Collection)取交集
void clear()移除所有对象
boolean equals(Object o)
int hashCode()
(2)Set常用方法:跟Collection一样(无序不可重复)
(3)List常用方法:除了Collection中的,还有:
(有序可重复,多了些跟索引有关的方法)
E get(int index)
E set(int index, E element)在相应的位置覆盖元素
void add(int index, E element)在相应位置放置元素,相应位置之后的元素往后排
E remove(int index)把相应位置的元素移除
int indexOf(Object o)、lastIndexOf(Object o)

2、S02E100_01容器List子类ArrayList、LinkedList、Vector用法详解
ArrayList:底层实现是数组,线程不安全,效率高。所以,查询快。修改、插入、删除慢。
LinkedList:底层实现是链表,线程不安全,效率高。所以,查询慢。修改、插入、删除快。
Vector:底层实现是数组。线程安全,效率低。

3、S02E101_01自己实现ArrayList——数组扩容、(add、get、remove、set)方法、equals问题

package com.test.arraylist;

public class MyArrayList {
    private Object[] elementData;
    private int size;

    public MyArrayList(){
        this(3);//初始容量
    }
    public MyArrayList(int initialCapacity){//指定初始容量
        if(initialCapacity < 0){
            try {
                throw new Exception();
            } catch (Exception e) {
            }
        }
        elementData = new Object[initialCapacity];//创建数组
    }

    public int size(){
        return elementData.length;
    }

    public boolean isEmpty(){
        return size ==0;
    }

    public void add(Object obj){
        ensureCapacity();//确保容量
        elementData[size++] = obj;
    }

    public Object get(int index){
        rangeCheck(index);//检查索引有没有超过范围
        return elementData[index];
    }

    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;
    }

    private void rangeCheck(int index){//检查索引有没有超过范围
        if(index >= size){
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void remove(Object obj){
        for (int i = 0; i < size; i++) {
            if(get(i).equals(obj)){//注意:底层调用的是equals方法而不是==,有些类对比的是值。  
                remove(i);
            }
        }
    }

    public Object set(int index,Object obj){
        rangeCheck(index);//检查索引有没有超过范围
        Object oldValue = elementData[index];
        elementData[index] = obj;
        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[] newArrary = new Object[size * 2 + 1];
            System.arraycopy(elementData, 0, newArrary, 0, elementData.length);
            elementData = newArrary;
        }
    }

    public static void main(String[] args) {
        MyArrayList list = new MyArrayList();
        list.add(0);
        list.add(1);
        list.add(2);
        list.add(4);
        list.add(5);
        System.out.println(list.size());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值