java集合框架

来源:互联网 发布:mac装软件用什么程序 编辑:程序博客网 时间:2024/06/07 12:02

Java集合框架支持两种类型的容器:
(1)集合(collection) (2) 存储键值对,图(map)
集合:规则集(Set)、线性表(List)和队列(Queue)。
这里写图片描述

规则集Set

这里写图片描述

HashSet

客座率(load factor):测量在增加规则集容量之前,该规则集的饱满程度。当元素个数超过了容量与客座率的乘积时,容量就会自动翻倍。
HashSet默认初始容量16,客座率0.75。用于存储互不相同的任何元素。

LinkedHashSet

LinkedHashSet用一个链表来扩展HashSet,支持对规则集的元素排序。

TreeSet

TreeSet

线性表

ArrayList与LinkedList

ArrayList用数组存储元素,这个数组是动态创建的,如果元素个数超过了数组的容量,就创建一个更大的新数组,并将当前数组中的所有元素都复制到新数组中。
LinkedList在一个链表中存储元素。如果需要通过下标随机访问元素。但是除了在末尾之外,不在其他任意位置插入或删除元素,ArrayList效率高。如果在线性表任意位置插入删除元素,LinkedList效率高。
TreeSet在规则集中存储有序的元素。但是线性表不支持有序存储。

规则集和线性表的性能

public class SetListPerformanceTest {    public static void main(String[] args){        Collection<Integer> set1=new HashSet<Integer>();        System.out.println("Time for hash set is "+        getTestTime(set1,500000)+" milliseconds");        Collection<Integer> set2=new LinkedHashSet<Integer>();        System.out.println("Time for Linked hash set is "+        getTestTime(set2,500000)+" milliseconds");        Collection<Integer> set3=new TreeSet<Integer>();        System.out.println("Time for tree set is "+        getTestTime(set3,500000)+" milliseconds");        Collection<Integer> list1=new ArrayList<Integer>();        System.out.println("Time for array list is "+        getTestTime(list1,60000)+" milliseconds");        Collection<Integer> list2=new LinkedList<Integer>();        System.out.println("Time for linked list is "+        getTestTime(list2,60000)+" milliseconds");    }    private static long getTestTime(Collection<Integer> c, int size) {        // TODO Auto-generated method stub        long startTime=System.currentTimeMillis();        List<Integer> list=new ArrayList<Integer>();        for(int i=0;i<size;i++){            list.add(i);        }        Collections.shuffle(list);//打乱list 的元素        for(int element:list)            c.add(element);        Collections.shuffle(list);        for(int element:list)            c.remove(element);        long endTime=System.currentTimeMillis();        return endTime-startTime;    }}Time for hash set is 315 millisecondsTime for Linked hash set is 1217 millisecondsTime for tree set is 886 millisecondsTime for array list is 1524 millisecondsTime for linked list is 4003 milliseconds

规则集比线性表更加高效,如果程序用规则集就足够,那就用规则集,如果不需要特别顺序,就选择散列集。

向量类Vector和栈类Stack

队列和优先队列

队列是一种先进先出的数据结构。元素被追加到队列末尾,然后从队列头删除。优先队列中,元素被赋予优先级,当访问元素时,拥有最高优先级的元素首先被删除。

双端队列Deque和链表LinkedList

LinkedList实现了Deque接口,Deque又扩展了Queue接口。可以用LinkedList创建一个队列。

图(map)是一种依照键值对存储元素的容器,不能有重复的键值。
三种类型:散列图HashMap,链式散列图LinkedHashMap和树形图TreeMap。
对于定位一个值、插入一个映射以及删除一个映射而言,HashMap是高效的。
LinkedHashMap支持排序。
TreeMap在遍历好顺序的键值时是很高效的。
HashMap中条目的顺序是随机的,而TreeMap中的条目是按键值对的升序排列的

0 0
原创粉丝点击