Java集合综述

来源:互联网 发布:光的双缝干涉实验 知乎 编辑:程序博客网 时间:2024/05/18 17:23

目录

一、前言

二、框架图

三、代码展现

—————————————————————————————————————-

一、前言

       在书写程序的时候,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中。
       由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询、遍历、修改等基本接口功能。
       早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。
       但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降。

       为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求。

二、框架图

JAVA的容器—List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

!其中的Vector和Stack类现在已经极少使用。

这里写图片描述

从容器类图中可以发现,数据容器主要分为了两类:

Collection: 存放独立元素的序列(单链)。

Map:存放key-value型的元素对(双链)。(这对于一些需要利用key查找value的程序十分的重要!)

从类体系图中可以看出,Collection定义了Collection类型数据的最基本、最共性的功能接口,而List对该接口进行了拓展。

—————————————————————————————————————–

其中各个类的适用场景有很大的差别,在使用时,应该根据需要灵活的进行选择。此处介绍最为常用的四个容器

LinkedList :其数据结构采用的是链表 ,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。

ArrayList:其数据结构采用的是线性表 ,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。

HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。(数据无序)

HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。

————————————————————————————————————————-

此处介绍不常用的五个容器

TreeSet:是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。

LinkedHashSet:是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。

HashMap:是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。

TreeMap:实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

LinkedHashMap :LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

三、代码展现

Java中ArrayList和LinkedList区别
http://blog.csdn.net/silentwolfyh/article/details/70787815

ArrayList:按照插入的顺序保存数据

import java.util.ArrayList;public class ArrayListTest {    public static void main(String[] args) {        ArrayList<String> alist = new ArrayList<String>();        alist.add("I ");        alist.add("am ");        alist.add("程序猿");        System.out.println(alist);          }}结果:[I , am , 程序猿]

TreeSet:插入值之后,打印出来有序

import java.util.Random;import java.util.Set;import java.util.TreeSet;public class TreeSetTest {    public static void main(String[] args) {        Random rand = new Random(47);        Set<Integer> intset = new TreeSet<Integer>();        for(int i = 0; i<1000;i++)            intset.add(rand.nextInt(30));        System.out.println(intset);    }}结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

HashSet:没有重复值,且无序

import java.util.HashSet;import java.util.Random;import java.util.Set;public class HashSetTest {    public static void main(String[] args) {        Random rand = new Random(47);        Set<Integer> intset = new HashSet<Integer>();        for(int i = 0; i<1000;i++)            intset.add(rand.nextInt(30));        System.out.println(intset);    }}结果:[24, 1, 2, 3, 4, 29, 5, 6, 7, 25, 8, 9, 18, 10, 11, 27, 12, 13, 0, 22, 14, 15, 16, 17, 19, 20, 21, 23, 26, 28]

迭代器:遍历所有数据

import java.util.Iterator;import java.util.Random;import java.util.Set;import java.util.TreeSet;public class IteratorTest {    public static void main(String[] args) {        Random rand = new Random(47);        Set<Integer> intset = new TreeSet<Integer>();        for(int i = 0; i<1000;i++)            intset.add(rand.nextInt(30));        display(intset.iterator());    }    public static void display(Iterator<Integer> iterator){            while(iterator.hasNext()){            Integer inext = iterator.next();            System.out.print(inext+ " ");        }    }}结果:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 

       如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!

0 0
原创粉丝点击