java 集合类Array、List、Map区别和联系
java集合类主要分为以下三类:
第一类:Array、Arrays
第二类: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 的区别和联系 Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的...
常见的集合映射类型有 Set、List、Array、Map 和 Bag 等,每种类型都有其特点和应用场景。 Set 集合映射 Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不...
在Java编程中,集合框架是核心部分,它提供了数据存储和操作的各种接口和类。本话题将重点关注集合的分组和排序,这是处理数据时常见的需求。Java集合框架中的`List`接口和数组(Array)是两种常用的数据结构,它们...
Java集合容器是Java编程语言中用于存储和管理对象的核心组件。在Java中,集合框架提供了多种数据结构,如...在实际开发中,掌握这些集合类和接口的特性和使用场景至关重要,它们是编写高效、可维护的Java代码的基础。
### Java集合类的基本用法 Java集合框架是Java标准库的一部分,它提供了强大的容器对象来存储和操作数据。集合框架主要包括两种类型的容器:列表(List)和集合(Set)。此外,还包括映射(Map),用于存储键值对。...
集合分为多种类型,如List、Set和Map,它们都是位于`java.util`包下的接口。其中: - Collection是最基本的接口,定义了基本的添加、删除和检查元素的方法。 - Iterator接口用于遍历集合中的元素,提供了`hasNext()...
Java集合框架是Java语言中提供的一组通用的集合类和接口,用于存储和操作多个对象。 Java集合框架的出现解决了原来Java语言中Vector、Stack、HashTable、Array等类的混乱状态,使得Java语言变得更加简洁和高效。 2....
- `Vector`: 是一种线程安全的动态数组实现,但在现代Java开发中很少使用,因为它相较于其他非线程安全的集合类来说性能较差。 #### 三、Iterator 迭代器(接口) **1. Iterator 接口** - `Iterator`接口用于遍历...
集合类是用于存储和操作多个数据项的数据结构,在.NET框架中,集合类广泛应用于各种场景。本篇将对ArrayList和HashTable这两个常用集合类进行实例操作练习,详细解释如何对它们进行添加、遍历和移除等操作,并探讨...
在Java中,集合被定义为一个容器,其中包括映射(Map)、集合(Set)、列表(List)、数组(Array)和散列表(Hashtable)等抽象数据结构。这些集合类和接口构成了Java集合框架,它们位于`java.util`包中。 ### 数组类 数组类...
### Java中的Map、List、Set等集合类详解 #### 一、概述 在Java的`util`包中,集合框架的基础构建块主要包括`Collection`和`Map`两大类。其中,`Collection`作为所有单一键值集合的父接口,而`Map`则专门处理键值对...
Java 集合框架提供了多种集合类,包括List、Set、Map等。List接口实现类有ArrayList、LinkedList、Vector等。Set接口实现类有HashSet等。Map接口实现类有HashMap等。 List接口 List接口是Java集合框架中的一种...
- **`Array`**:类似于Java中的`List`,但JavaScript的数组支持更多灵活的操作,比如动态调整长度。 - **`Set`**:类似于Java中的`Set`,但JavaScript的`Set`允许更简单的构造和管理。 - **`Map`**:类似于Java中的`...
Java集合容器是Java编程中非常重要的组成部分,掌握其概念、原理以及各种集合类的特点和使用场景对于开发高质量的应用程序至关重要。通过本篇文章的学习,希望读者能够更好地理解和应用Java集合容器,提升编程技能。
总的list和set类结构大致如下所示 Map不继承Collection,其结构如下 首先介绍下迭代器的概念 迭代器无非是一个接口,假设我们有一个数组,如果我们要实现迭代器,只需要根据该接口定义的方法,返回对应结果而已. 如下代码...
- `ConcurrentHashMap`、`CopyOnWriteArrayList`、`CopyOnWriteArraySet`等线程安全的集合类适用于多线程环境。 10. **泛型**: - 泛型用于限制集合中的元素类型,提高代码安全性,如`List<String>`只允许存储...
虽然Array不是集合类,但它是ArrayList和ArrayList中的元素类型。`Collection_Array.java`可能展示了如何将数组转换为集合或反之的操作。 3. HashMap: 这是一个基于哈希表实现的键值对容器,提供O(1)的平均查找时间...