List、Map

Collection
    |_  Set
         |_ TreeSet
         |_ HashSet
         |_ SortedSet

    |_  List
         |_  Vector
                |_  Stack
         |_  ArrayList
         |_  LinkedList


Map
 |_  HashMap
 |_  Hashtable
 |_  TreeMap
  .....

List

1.List中元素有序、允许重复的元素,Set中的元素无序、不可重复的元素。

2.Vector、ArrayList是以数组形式存储在内存中,LinkedList则以链表形式存储。

3.Vector线程同步、ArrayList、LinkedList线程不同步。Vector同步,Arraylist不同步,ArrayList比Vector性能更好。

4.LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。

5.ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间。

源码分析:

Vector:

public Vector() {
        this(10);
}
public Vector(int initialCapacity) {
        this(initialCapacity,0);
}
public Vector(int initialCapacity, int capacityIncrement) {//第二个参数,每次增长的量
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
}

扩容:

//Vector
private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity); //增长
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
//ArrayList:
private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);     //增长
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

效率:

ArrayList Vector 对于插入删除 效率很快,通过索引操作,查询速度慢

LinkedList 查询速度慢,插入删除慢

查找方面  LinkedList 要移动指针,查询慢

增删方面  ArrayList Vector 要重排数据,所以增删慢

Set

 

Map

HashMap 线程不同步,允许NULL的key和Value

HashTable线程同步,不允许NULL的key或Value

 

HashSet和HashMap的区别

*HashMap**HashSet*
HashMap实现了Map接口HashSet实现了Set接口
HashMap储存键值对HashSet仅仅存储对象
使用put()方法将元素放入map中使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
HashMap比较快,因为是使用唯一的键来获取对象HashSet较HashMap来说比较慢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值