`
je_小彬
  • 浏览: 72223 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Set与List的分析

 
阅读更多
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。

  Java2容器类类库的用途是“保存对象”,它分为两类:

  Collection----一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set不能有重复元素。

  Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。

  1.迭代器

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。

  (2) 使用next()获得序列中的下一个元素。
http://xu20cn.blog.51cto.com/274020/229009
http://xu20cn.blog.51cto.com/274020/229009

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

  2.List的功能方法

  List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。

  ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。

  LinkedList: 对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

  3.Set的功能方法

  Set(interface): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

  HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。

  TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。

  LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

  HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。
分享到:
评论

相关推荐

    Java应用:两种Java容器类List和Set分析

    ### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...

    List和Set使用retainAll方法的比较

    本文将深入探讨List和Set在使用`retainAll`方法时的效率差异,并通过`ListAndRetainAll.java`和`SetAndRetainAll.java`两个示例代码来具体分析。 首先,让我们了解`retainAll`方法的基本概念。`retainAll`是Java...

    《partner4java 讲述 java基础》之第一步:list 、set 、map 粗浅性能对比分析 - java相关技术(partner4java专栏)

    《partner4java 讲述 java基础》之第一步:list 、set 、map 粗浅性能对比分析 - java相关技术(partner4java专栏)

    list map set区别

    ### List、Map、Set 的核心概念与特性 #### 一、List **List** 是 Java 集合框架中最常用的数据结构之一,它允许元素重复并保持元素的插入顺序。 - **特点**: - 元素有放入顺序,元素可重复。 - 提供了对元素...

    分析LIST对象排序通用方法HIBERNATE的SET排序.pdf

    分析LIST对象排序通用方法HIBERNATE的SET排序.pdf

    Java 集合框架深度解析:List、Set 和 Map 的差异与应用

    本文将深入探讨 Java 集合框架,并详细分析 List、Set 和 Map 之间的区别及其应用场景。 Java 集合框架是 Java 程序设计中不可或缺的一部分,它提供了灵活、高效的方式来处理数据集合。List、Set 和 Map 作为集合...

    java的序列 map list set sequene

    在Java编程语言中,Map、List和Set是三个核心的集合接口,它们分别代表了键值对、有序元素列表和不重复元素集合。这三种数据结构在实际开发中有着广泛的应用,理解它们的特性和使用方式是每个Java开发者的基础技能。...

    Setlist.rar

    通过分析和理解"Setlist"中的代码,我们可以深入学习如何在实际编程中有效地使用链表,包括如何优化插入、删除和查找操作,以及如何处理链表的边界条件。这对于提升C++编程技能和理解数据结构原理至关重要。在实践中...

    Python判断值是否在list或set中的性能对比分析

    ### Python判断值是否在list或set中的性能对比分析 在Python编程中,经常需要检查一个值是否存在于某个数据结构中,比如列表(list)或集合(set)。这种操作的性能对于程序的整体运行效率有着直接的影响。本文将...

    Set IDENTITY _INSERTY用法

    在数据库管理与开发过程中,`SET IDENTITY_INSERT` 是一个非常实用的功能,主要用于允许或禁止手动插入带有 `IDENTITY` 属性的字段值。这一特性对于需要进行数据迁移或者特殊场景下的数据操作非常重要。 #### 1. ...

    第17章 - 深入研究容器 - Collection(List,Set,Queue)的性能测试框架(单线程中)(P501)

    在深入研究Java集合框架,特别是List、Set和Queue的性能测试时,我们通常会关注它们在单线程环境中的表现。这些容器是Java编程中不可或缺的一部分,用于存储和管理对象。本章将探讨如何构建一个性能测试框架来比较...

    自己对List,Set,Map等集合类的理解

    在Java编程语言中,集合框架是处理对象组的重要工具,其中List、Set和Map是最基本的接口,分别代表了有序的列表、无序的集合和键值对的映射关系。下面将详细解释这些集合类及其特点。 1. **List接口**: List是一...

    JAVA集合(List,Set,Map)

    本篇文章将深入探讨集合框架中的三大核心组件:`List`、`Set`以及`Map`,并通过具体的接口和类来分析它们的特点和应用场景。 #### 集合接口 在Java集合框架中,主要有以下几种关键接口: - **`Collection`接口**:...

    Java集合框架深度解析:Map, List, Set

    深入的洞察到Java集合框架的核心组件:Map, List, 和 Set。首先,深入分析了HashMap的内部结构,包括它的数组+链表+红黑树的数据结构。重要的是理解如何处理并发问题,特别是在Java 8中对HashMap的优化,如高低位...

    java计算同一个list中是否有相同的值

    4. **计数**:计算 `list2` 的大小并加上 1(因为还需要考虑当前元素本身),然后将其与之前记录的最大重复次数 `num` 进行比较,如果当前的计数值更大,则更新 `num`。 5. **结果输出**:最后打印出最大重复次数 `...

    Java Map、List、Set Swing 英文词频统计

    在Java编程语言中,Map、List和Set是三个核心的集合接口,它们分别代表了键值对、有序元素序列和不重复元素集。本项目利用这些数据结构进行英文词频统计,结合Swing构建用户界面,提供了一种交互式的文本分析工具。 ...

    Python 两个列表的差集、并集和交集实现代码

    ret_list = list((set(a_list).union(set(b_list))) ^ (set(a_list) ^ set(b_list))) print(ret_list) ``` **解释:** 1. 计算两个集合的并集和对称差集。 2. 对并集和对称差集进行异或运算得到交集。 3. 转换成...

    set与if总结.docx

    在迭代 list 时,可以使用 s:iterator 标签,注意 list 和 set 容器前不需要加 `#`。 2. 存储基本类型: `<s:set name="miloNum" value="24"/>` 这个例子中,我们将整数 24 存储在了 `miloNum` 变量中。当输出...

    list.toArray方法

    在深入讲解之前,我们需要理解Java集合框架的基础,它包括Set、List和Map等接口,以及它们的实现类,如ArrayList、LinkedList和HashMap等。 List接口是Collection接口的子接口,它代表了一个有序的集合,允许有重复...

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    List的主要方法有add、get、set、remove等,而ArrayList实现了这些方法。 ArrayList和Vector的区别在于,ArrayList是非同步的,而Vector是同步的。因为同步需要花费机器时间,所以Vector的执行效率要低于ArrayList...

Global site tag (gtag.js) - Google Analytics