`

集合类之间的区别和联系

阅读更多
Collection:List、Set
Map:HashMap、HashTable

如何在它们之间选择


一、Array , Arrays

Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

1、
效率高,但容量固定且无法动态改变。
array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

2、Java中有一个Arrays类,专门用来操作array。
     arrays中拥有一组static函数,
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
System.arraycopy():array的复制。


二、Collection , Map

若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

1、Collection 和 Map 的区别

容器内每个为之所存储的元素个数不同。
Collection类型者,每个位置只有一个元素。
Map类型者,持有 key-value pair,像个小型数据库。

2、各自旗下的子类关系

Collection
     --List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
           --ArrayList / LinkedList / Vector
     --Set : 不能含有重复的元素
           --HashSet / TreeSet
Map
     --HashMap
    --HashTable
    --TreeMap

3、其他特征

*   List,Set,Map将持有对象一律视为Object型别。
*   Collection、List、Set、Map都是接口,不能实例化。
    继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
*   vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。


三、Collections

Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类——Arrays。
如,Collections.max(Collection coll); 取coll中最大的元素。
     Collections.sort(List list); 对list中元素排序

四、如何选择?

1、容器类和Array的区别、择取
    *   容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。
    *   一旦将对象置入容器内,便损失了该对象的型别信息。

2、
   *   在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();
      Vector总是比ArrayList慢,所以要尽量避免使用。
   *   在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
      HashTree存在的唯一理由:能够维护其内元素的排序状态。
   *   在各种Maps中
      HashMap用于快速查找。
   *   当元素个数固定,用Array,因为Array效率是最高的。

结论:最常用的是ArrayList,HashSet,HashMap,Array。


注意:

1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。

5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
    HashMap会利用对象的hashCode来快速找到key。
    *   hashing
        哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
        我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。
     
        发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。

6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。

为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。
Collection:List、Set
Map:HashMap、HashTable

如何在它们之间选择


一、Array , Arrays

Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

1、
效率高,但容量固定且无法动态改变。
array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

2、Java中有一个Arrays类,专门用来操作array。
arrays中拥有一组static函数,
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
System.arraycopy():array的复制。


二、Collection , Map

若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

1、Collection 和 Map 的区别

容器内每个为之所存储的元素个数不同。
Collection类型者,每个位置只有一个元素。
Map类型者,持有 key-value pair,像个小型数据库。

2、各自旗下的子类关系

Collection
--List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
--ArrayList / LinkedList / Vector
--Set : 不能含有重复的元素
--HashSet / TreeSet
Map
--HashMap
--HashTable
--TreeMap

3、其他特征

* List,Set,Map将持有对象一律视为Object型别。
* Collection、List、Set、Map都是接口,不能实例化。
继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
* vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。


三、Collections

Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类——Arrays。
如,Collections.max(Collection coll); 取coll中最大的元素。
Collections.sort(List list); 对list中元素排序


四、如何选择?

1、容器类和Array的区别、择取
* 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。
* 一旦将对象置入容器内,便损失了该对象的型别信息。

2、
* 在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();
Vector总是比ArrayList慢,所以要尽量避免使用。
* 在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
HashTree存在的唯一理由:能够维护其内元素的排序状态。
* 在各种Maps中
HashMap用于快速查找。
* 当元素个数固定,用Array,因为Array效率是最高的。

结论:最常用的是ArrayList,HashSet,HashMap,Array。


注意:

1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。

5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
HashMap会利用对象的hashCode来快速找到key。
* hashing
哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。

发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。

6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。

为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。
分享到:
评论

相关推荐

    Java集合类List-Set-Map的区别和联系.doc

    Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的介绍。 一、Array、Arrays 和 Collection...

    图1种各类的区别和联系很明显:同行同集合类性,同列同数据结构。

    图1种各类的区别和联系很明显:同行同集合类性,同列同数据结构。根据Java集合框架的体系,不同的集合类在拥有父类型的操作时由于本身的集合类型和数据结构类型的不同,都有其特有的方法。兄弟类之间有同名的方法也...

    抽象类和接口的详细区别和联系

    ### 抽象类和接口的详细区别和联系 在面向对象编程中,抽象类与接口是两种非常重要的概念,它们都是实现多态性的方式之一,但在使用场景、语法特性和设计哲学等方面存在明显的不同。本篇文章将深入探讨这两者的区别...

    java高级集合类

    本篇文章将详细介绍三种主要的集合类型:`List`、`Set` 和 `Map` 的特性、区别及联系。 #### 二、`List` 集合 **特点**: - 有序:`List` 维护了一个明确的顺序,通常是元素被添加的顺序。 - 允许重复元素:可以在...

    素数和合数之间的区别和联系

    ### 素数和合数之间的区别和联系 #### 定义 - **素数**:素数(或称为质数)是指大于1的自然数中只能被1和自身整除的数。也就是说,素数只有两个正因子:1和它本身。 - **合数**:合数是指除了1和它本身外还有其他...

    Java中抽象类和接口的区别与联系.pdf

    "Java中抽象类和接口的区别与联系" Java中抽象类和接口是面向对象程序设计语言中两种不同的机制,都是支持类定义的方式。抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,但它们之间还是有很大的区别...

    2020学年高中数学 1.2 集合之间的关系与运算 1.2.1 集合之间的关系导学案(无答案)新人教B版必修1.doc

    总的来说,集合之间的关系是高中数学中的重要主题,它要求我们清晰地理解元素与集合、集合与集合之间的联系,以及如何用符号表示这些关系。通过练习和问题解决,学生可以深化对集合论的理解,为后续的数学学习打下...

    模式识别的本质是分类识别与认知的区别和联系.docx

    模糊模式识别处理的是边界模糊的数据,模糊集合和模糊关系提供了一种处理不确定性的框架。模糊聚类和模糊k-均值算法允许数据在类别中的“模糊”归属。 句法模式识别则涉及结构信息的分析,特别是在自然语言处理中,...

    Day17 Java 集合和泛型.pdf

    最后,提及了Map的三种实现类之间的区别和联系。它们都实现了Map接口,可以存储任意类型的键值对,且都是无序的,即键值对的输入顺序和输出顺序没有关系。不同点在于,Hashtable线程安全且不能使用null作为键或值,...

    模式识别的本质是分类识别与认知的区别和联系.pdf

    贝叶斯分类器利用贝叶斯公式,结合先验概率和类条件概率密度进行分类,最小错误率和最小风险贝叶斯分类考虑了分类错误的实际代价。 数据聚类是无监督学习的一部分,目标是根据相似性将数据自然地分成组,聚类准则如...

    模式识别的本质是分类识别与认知的区别和联系 (2).pdf

    分类是基于样本、模式和类之间的相似性进行的,而学习则涉及从训练数据中提取规律和模式。 其次,我们了解基本概念,如样本代表数据实例,模式是数据的抽象或表征,而类则是我们要识别的目标类别。特征和特征空间是...

    框架、组件、插件、控件中间件概念及区别

    本文旨在详细解析框架、组件、插件、控件以及中间件这几个概念,并探讨它们之间的区别与联系。 #### 几个概念 1. **类库** 类库是指程序员用来实现各种功能的一系列类的集合。例如`FileUtil`和`XMLUtil`等工具类...

    Spring MVC、Spring Boot和Spring Cloud 三者区别和联系.txt

    ### Spring MVC、Spring Boot 和 Spring Cloud 三者的区别与联系 #### 一、Spring MVC Spring MVC 是 Spring Framework 的一个重要组成部分,主要用于构建基于 Java 的 Web 应用程序。该框架采用了 MVC(Model-...

    Java集合与数组区别简介及相互转换实例

    Java集合(Collection)和数组(Array)是Java语言中两种常用的数据存储结构,它们之间存在着一定的区别和联系。本文将主要介绍Java集合与数组的区别简介及相互转换实例,以便读者更好地理解和应用它们。 一、数组...

    对象集合与对象组合

    这些集合类提供了对对象进行添加、删除、查找和遍历等操作的方法。对象集合的使用使得我们可以方便地处理大量对象,同时也可以通过集合类提供的方法实现对对象的排序、筛选等操作。对象集合的概念在实际开发中广泛...

    精通java集合框架--List,Set..

    本文将深入探讨Java集合框架的核心概念,包括`List`、`Set`、`Map`以及它们之间的区别和联系。 #### Java集合框架简介 Java集合框架是Java平台的一部分,它由一系列接口组成,这些接口描述了不同类型的容器,比如...

    实体联系模型

    数据模型 作用:对现实世界进行...概念模型:也称信息模型,它按用户的观点对数据和信息进行建模,用于信息世界,它强调语义表达能力,是现实世界到信息世界的第一次抽象,是用户和数据库设计人员之间进行交流的语言。

    北京市2020年高考数学最新联考试题分类大汇编(1)集合试题解析.pdf

    在解答集合类试题时,考生应注意以下几点: - 明确集合的定义:集合是由确定的对象组成的整体,每个对象称为集合的元素。 - 掌握集合的运算:包括并集(A∪B),交集(A∩B),差集(A-B),以及补集(A'或∁U A)。 - 理解...

    基于数据结构与简化内存模型的Java集合教学方法研究.pdf

    这种教学策略不仅使学生能够清晰地掌握不同集合类的特性和应用场景,而且有助于学生建立起数据结构与Java集合框架之间的联系,从而达到更加深入和全面的理解。这种教学方法也符合当前计算机教育中倡导的理论与实践相...

Global site tag (gtag.js) - Google Analytics