集合

数组与集合
数组为java内置结构,其存入对象数量及类型固定,不可更改。也就是说程序在运行前就已经知道所要创建的对象的数量以及类型,但并非所有程序在运行前就能获知对象类型以及对象数量信息,因此引入了集合。
集合主要用于保存数据,集合中保存的是对象句柄,会将类型信息丢弃,这就是为何在运行中才能得知对象类型。


集合类关系如下:
集合关系


下面介绍主要的集合:
1.List接口
有序,可以包含重复的元素,能够精确控制每个元素插入位置,使用索引访问list中元素,类似于数组。常用的实现类有下面4个:

1.1ArrayList

可变数组,默认长度为10,默认元素为null,可根据元素个数动态扩展list长度;非同步;顺序存储结构

1.2LinkedList

双向链表结构(每个节点都有前驱和后驱);非同步

1.3Vector

类似于数组,其大小可动态扩展和收缩;同步

1.4Stack

先进后去栈,从Vector继承。
2.Set接口
不允许有相同元素,最多只能有一个null元素,
3.Map接口
提供key到value的映射,key中不能包含重复元素,一个key可以对应多个value;提供三种视图,一种key的set集合,一种value的collection集合,一种key-value的set集合

3.1HashTable

key、value对象要求非空,作为key的对象需要实现hashCode方法和equals方法;通过计算key的散列函数来确定对应的value值。如果俩个对象相同,其hashCode相同;同步
get方法实现:

public synchronized V get(Object key){
Entry<?,?> tab[] = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
for(Entry<?,?> e = tab[index]; e != null; e = e.next){
if((e.hash == hash) &&e.key.equals(key)){
return (V)e.value;
}
}
return null;
}

3.2HashMap

hashMap与hashTable类似,除了hashMap允许key、value为null,以及非同步
4.Iterator接口
替代了java1.1中的Enumeration,对多元素进行迭代处理。

简单实现:

import java.util.*;
/**
 * 初始化未赋值后,存入值为null,实现Map接口的类无法使用Iterator迭代,
 * 实现set、list接口的使用iterator迭代更安全
 * Created by D on 2017/10/9.
 */
public class test {
    public static void main(String[] args){
        Map hashMap = new HashMap(15);
        Map hashTable = new Hashtable(15);
        List vector = new Vector(15);
        List arrayList = new ArrayList(15);
        List statck = new Stack();
        List linkedList = new LinkedList();
        Set hashSet = new HashSet(15);
        for (int i = 0; i < 15; i++){
            hashMap.put(i,i*i);
            hashTable.put(i+1,i*5);
            vector.add(i);
            arrayList.add(i+i);
            statck.add(3*i);
            linkedList.add(4*i);
            hashSet.add(5*i);
        }
        Iterator itVector = vector.iterator();
        Iterator itArrayList = arrayList.iterator();
        Iterator itStack = statck.iterator();
        Iterator itLinkedList = linkedList.iterator();
        Iterator itHashSet = hashSet.iterator();
        useIterator(itVector);
    }
    /**
     * 使用iterator迭代数据
     * @param it
     */
    public static void useIterator(Iterator it){
        while (it.hasNext()){
            System.out.println("数据:"+it.next());
        }
    }
}

总结:
1.linkedList:快速删除、插入元素
2.Stack:先进后出堆栈操作
3.arrayList:快速随机查询元素
4.Set:无序,不允许重复
5.单线程,考虑非同步,多线程,使用同步
6.哈希表操作,作为key对象需要重写hashCode以及equals方法
7.除排序情况下使用treeset、treemap,其他考虑hashset、hashmap,效率更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值