来源: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());
}
}