集合类:<o:p></o:p>
一:什么是Bags ?<o:p></o:p>
<o:p> </o:p>
Bags就是实现了collection接口,可包含重复元素的无序的collection.
(在Collection中没有具体定义的类。)<o:p></o:p>
<o:p> </o:p>
二:Set 和 List 的区别:<o:p></o:p>
<o:p> </o:p>
1. Set:<o:p></o:p>
(1).Set不含重复元素,即:不包含满足 e1.equals(e2) 的元素。
(2).Set 的 hashCode():返回set 的哈希码值。Set 的哈希码定义为此 set 中所有元素的哈希码和。其中 null 元素的哈希码定义为零。所以:任意两个 Set : set1 和set2,
s1.equals(s2) 就意味着 s1.hashCode() ==s2.hashCode();
(hashcode:比较的是内存地址。)<o:p></o:p>
2. List:<o:p></o:p>
(1). 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素
(2).列表通常允许重复的元素。更正式地说,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。
3. Map: (参考JAVA中文API)<o:p></o:p>
(1). public interface Map<K,V>: 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。
<o:p> </o:p>
(2). public static interface Map.Entry<K,V>: 映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的惟一 方法是通过此 collection 视图的迭代器来实现。
<o:p> </o:p>
(3). Set<Map.Entry<K,V>> entrySet(): 返回此映射中包含的映射关系的 set
视图。返回的 set 中的每个元素都是一个 Map.Entry
。<o:p></o:p>
<o:p> </o:p>
三: Iterator VS Enumeration:<o:p></o:p>
1. Iterator: (参考JAVA中文API)<o:p></o:p>
(1). Iterator:对集合进行迭代的迭代器。迭代器代替了Enumeration。迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。
(2): Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口.
(3). 方法:
(I)boolean hasNext
()
: 如果仍有元素可以迭代,则返回 true。
(II) E next
()
: 返回迭代的下一个元素
(III) void remove
()
: 从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。
2. Enumeration: (参考JAVA中文API)<o:p></o:p>
(1).实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement
方法将返回一系列的连续元素。
(2). Enumeration的两个方法:
(i) blooean hasMoreElements()
: 测试此枚举是否包含更多的元素。
(ii)Enumeration nextElement()
: 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
<o:p> </o:p>
三:HashSet 和 TreeSet 的区别 :(参考JAVA中文API)<o:p></o:p>
1. HashSet: (如果两个对象的hashCode相等,但不是同一个对象。则可以存入。)<o:p></o:p>
(1). 由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
(2). 注意,此实现不是同步的。 如果多个线程同时访问一个集合,而其中至少一个线程修改了该集合,那么它必须 保持外部同步。
(3). 此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果对集合进行修改,除非通过迭代器自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。
(4). 如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
(5). HashSet按照hashcode值的某种运算方式进行存储,而不是直接按hashCode值的大小进行存储。例如:
"abc" ---> 78,"def" ---> 62,"xyz" ---> 65在hashSet中的存储顺序不是62,65,78
2. TreeSet:<o:p></o:p>
(1).此类实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。此实现为基本操作(add、remove 和 contains)提供了可保证的 log(n) 时间开销.
(2). 注意,如果要正确实现 Set 接口,则 set 所维护的顺序(是否提供了显式比较器)必须为与等号一致(请参阅与等号一致 精确定义的 Comparable 或 Comparator)。这是因为 Set 接口根据 equals 操作进行定义,但 TreeSet 实例将使用其 compareTo(或 compare)方法执行所有的键比较,因此,从 set 的角度出发,该方法认为相等的两个键就是相等的。即使 set 的顺序与等号不一致,其行为也是 定义良好的;它只是违背了 Set 接口的常规协定。
(3). 注意,此实现不是同步的。如果多个线程同时访问一个 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步
四: Comparable VS Comparator : (参考JAVA中文API)<o:p></o:p>
1. 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法.<o:p></o:p>
2. 实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器(实际上,所有执行比较的 Java 核心类都具有 equals 一致的自然排序。java.math.BigDecimal 是个例外,它的自然排序把值相等但精确度不同的 BigDecimal 对象(比如 4.0 和 4.00)等同起来。)
3. intcompareTo(T o)
: 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回 -1、0 或 1
五:HashMap和Hashtable的区别: <o:p></o:p>
(1).都属于Map接口的类,实现了将惟一键映射到特定的值上。 <o:p></o:p>
(2). HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 <o:p></o:p>
(3). Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。 <o:p></o:p>
六: Collection 和 Collections的区别: <o:p></o:p>
(1).Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 <o:p></o:p>
(2).Collection是个java.util下的接口,它是各种集合结构的父接口。
七:Vector:<o:p></o:p>
同一个对象可以在Vector中加入多次。往集合里面加元素,相当于集合里用一根绳子连接到了目标对象。
<o:p> </o:p>
八:ArrayList VS Vector :<o:p></o:p>
<o:p> </o:p>
(1). Vector效率低,是线程安全的,也就是说是同步的,当需要增长时,Vector默认增长为原来一培。<o:p></o:p>
(2). ArrayList效率高,是线程序不安全的,不是同步的;当需要增长时, ArrayList是原来的一半。<o:p></o:p>
分享到:
相关推荐
C++编程:建造集合类实训 本文将详细讲解C++编程中集合类的实现,包括集合类的定义、添加元素、删除元素、判断集合是否为空或满、判断元素是否包含在集合中、计算集合中的元素总数、输出集合中的元素、求两个集合的...
实现复数集合类 要求:1、实现两个类:集合类(Cassemblage )和复数类(Cmycomplex)。 2、输入:分别输入集合中元素个数和元素(实部和虚部)。 3、输出:按照复数模的大小从小到大输出,不考虑两个复数模相等...
Java 集合类线程安全 Java 集合框架是由 Java 平台标准版 1.2 引入的通用数据结构与算法框架。其灵活的面对对象设计受到了广大 Java 程序员的一致青睐,为 Java 平台的成熟奠定了坚实的基础。 线程安全不是一个...
Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...
自定义集合类则是开发者根据特定需求扩展Java集合框架的行为,以满足个性化或特定业务场景的功能需求。以下是对"java自定义集合类"这一主题的详细解释。 首先,Java集合框架包括接口(如List、Set、Map)和实现这些...
Java集合类是Java编程语言中一个非常重要的概念,它提供了数据结构和算法的实现,使得在处理一组对象时更加高效和灵活。Java集合框架包括接口(如List、Set、Queue等)和实现这些接口的类(如ArrayList、HashSet、...
Java集合类是Java编程语言中用于存储和管理对象的关键组件,它们构成了Java Collections Framework的核心。这个框架提供了一组高效、灵活的数据结构,使得开发者能够轻松地处理数据集合,而无需关心底层实现的复杂性...
在C#编程语言中,集合类是处理数据结构的关键组件,它们提供了比传统数组更灵活、功能更丰富的数据存储方式。本文将深入探讨C#中六种常用的集合类,包括它们的特点、用法以及与其他数据结构如数组的区别,旨在帮助...
MFC 集合类可以按形态和设计方案来分类。MFC 为三种类型的集合形态提供了类: 列表 数组 映射 MFC 还提供三种类型的设计方案: 不使用 C++ 模板。 使用由简单元素组成的基于 C++ 模板的集合。 使用由类型...
### Java集合类详解总结 在Java编程中,集合框架(Collection Framework)是处理一组对象的强大工具,它提供了标准的数据结构来存储和操作这些对象。Java集合框架主要包括`Collection`、`Set`、`List`、`Queue`、`...
集合类的框架为集合的实现者提供了大量的接口和抽象类,并对其中的某些机制给予了描述,例如,Iterator(迭代协议)。实现Comparable接口或Comparator接口,用户可以根据需要对集合中的元素进行排序。为了方便用户...
根据给定的信息,本文将详细解释“泛型集合类的大致应用”,重点在于Java中的泛型集合类,如`ArrayList`、`HashMap`等,并结合实际代码示例进行讲解。 ### 泛型集合类概述 在Java编程语言中,集合框架提供了一组...
java集合类框架图
在IT行业中,集合类是数据结构的一个重要组成部分,它们提供了组织和操作对象的方便方式。在本案例中,我们关注的是一个名为"Animals"的集合类,它扩展了Java中的集合框架,允许通过关键字来索引Animal对象。此外,...
### 泛型与集合类知识点总结 #### 一、泛型简介 - **定义**:泛型是Java SE 5.0引入的新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 - **作用**: - ...
本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...
### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...
本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...
在编程领域,集合类是数据结构中的重要组成部分,主要用于存储一组不重复的元素。在Java中,`java.util.Set`接口及其子接口如`HashSet`、`TreeSet`等提供了整数集合的操作。本篇文章将深入探讨如何实现整数集合的...
本文基于针对集合类对象的内存泄漏检测方案实现了口oudFoundry云平台 中Java应用内存泄漏的检测,通过监控集合类对象的内存消耗和集合内元素的 使用情况,得出对象内存泄漏的可能性大小,...