容器Collection_Set_List_ArrayListJAVA099-102

来源:互联网 发布:复杂网络基本概念 编辑:程序博客网 时间:2024/05/16 08:07

来源: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