`
lorry1113
  • 浏览: 263254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java数据结构内容整理

    博客分类:
  • java
阅读更多
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 区别记忆
这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异。
有序否 允许元素重复否
Collection  否 是
List 是 是
AbstractSet 否 否
HashSet 否 否
TreeSet 是(用二叉树排序) 否
AbstractMap 否 使用key-value来映射和存储数据,Key必须惟一,value可以重复
HashMap 否 使用key-value来映射和存储数据,Key必须惟一,value可以重复
TreeMap 是(用二叉树排序) 使用key-value来映射和存储数据,Key必须惟一,value可以重复


List 接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器 中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内 部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。

Set接口也是 Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常 用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方 法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外 两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就 不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和 Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一 个数组进行类似的操作。


Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可 形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得 到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使 用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一 个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现: HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方 法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub (Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象
分享到:
评论

相关推荐

    (java)数据结构知识整理.pdf

    本文档主要围绕Java语言中数据结构的基础知识进行了整理,涉及算法的基本概念、特性、设计要求、时间复杂度,以及线性表的顺序存储结构和Java实现。 首先,算法被定义为解决特定问题的一系列操作指令的有限序列。一...

    韩顺平老师尚硅谷Java数据结构与算法194集笔记

    这是我从B站上看韩老师讲的数据结构与算法后整理的笔记 代码经过运行,欢迎批评指正 有些地方我感觉还是挺难的 大都经过我自己的语言进行描述,韩老师中期的表达可能或多或少也影响可阅读性,望先生们见谅

    数据结构代码JAVA版本

    本资源是“数据结构代码JAVA版本”,包含作者精心收集和整理的各种常见数据结构的Java实现,旨在为学习者提供一个全面的学习平台。 1. **数组**:最基础的数据结构,用于存储同类型元素的固定大小序列。Java中的...

    JAVA核心知识点整理.rar

    Java数据结构-->框架-->Java中间件,缓存JAVA核心知识点整理--》从Java基础-->Java数据结构-->框架-->Java中间件,缓存JAVA核心知识点整理--》从Java基础-->Java数据结构-->框架-->Java...

    JAVA数据结构排序动态演示

    在这个"JAVA数据结构排序动态演示"项目中,开发者通过实现一系列经典的排序算法并配合动态界面展示,使学习者能直观地理解各种排序算法的工作原理。 首先,我们来详细解析每个排序算法: 1. **直接插入排序(直接...

    数据结构复习资料,java数据结构期末考试.pdf

    根据提供的文件信息,以下是关于数据结构和Java数据结构期末考试的相关知识点整理: 一、算法分析基础: 算法分析是计算机科学的基础,涉及对算法性能的评估。增长函数用于表示问题大小n与算法的性能之间的关系,它...

    数据结构复习整理

    数据结构复习整理 本篇文章主要介绍了数据结构的几个重要知识点,包括顺序表、单链表、带头结点的单链表等数据结构的算法实现。这些算法涵盖了插入、删除、统计元素个数、求和等操作。 1. 顺序表插入算法: 在...

    newreview_die4ix_Java数据结构_

    "newreview_die4ix_Java数据结构_"这个标题暗示了这是一个关于Java编程和数据结构复习的资源,可能包含了作者die4ix在学习或教学过程中整理的笔记、示例代码或测试题目。 描述中提到的“java基本编程的复习”涵盖了...

    JAVA数据结构和算法

    “JAVA数据结构和算法(第二版)”很可能包含了关于这些主题的详细讲解,可能涵盖概念介绍、实例演示、源码分析等内容,帮助读者深入理解如何在Java中实现和应用数据结构与算法。通过学习,开发者不仅能提升编程技巧,...

    Java数据结构和算法

    Java数据结构和算法是计算机科学中的核心概念,它们在编程中扮演着至关重要的角色,能够帮助我们高效地处理和组织大量数据。在这个压缩包中,包含了一系列与Java数据结构和算法相关的材料,如源代码、笔记或其他教学...

    java数据结构算法教程

    根据提供的文件信息,“Java数据结构算法教程”似乎是一本针对初学者的书籍,旨在帮助他们理解和掌握使用Java语言实现的数据结构与算法。下面将详细展开该书可能涵盖的一些核心知识点。 ### Java 数据结构 #### 1....

    java 数据结构与算法

    Java 数据结构与算法是编程领域中的核心概念,对于任何Java开发者来说都至关重要。它们涉及到如何高效地存储和处理数据,以及如何设计和实现高效的算法来解决问题。以下是对这些概念的详细解释: 一、数组和简单...

    Java数据结构分享.zip

    Java数据结构与算法是计算机科学的核心内容,它们是解决问题和设计高效程序的基础。这份"Java数据结构分享.zip"压缩包提供了全面的学习资源,包括视频、课件、源码、笔记和图解,非常适合想要深入理解Java编程中的...

    java数据结构 复习资料

    ### Java数据结构复习资料知识点详解 #### 一、绪论 ...这些知识点涵盖了数据结构的基础概念、重要性、集合框架、递归以及`ArrayList`的使用等方面,对于学习Java数据结构来说是非常重要的内容。

    java经典面试试题(从数据结构到设计模式)

    根据提供的文件内容,我们可以整理出一系列与Java编程语言相关的知识点,包括数据结构、设计模式以及面试常见问题等。下面将对这些知识点进行详细的解析。 ### 1. Java平台概述 - **平台无关性**:Java的一大特点...

    Java数据结构和算法中文第二版

    《Java数据结构和算法中文第二版》是一本专为Java初学者设计的教程,它深入浅出地介绍了数据结构和算法的基本概念与实现方法。在Java编程语言的背景下,本书旨在帮助读者理解如何有效地存储和处理数据,以及如何通过...

    java数据结构和算法

    ### Java数据结构与算法详解 #### 一、数组与简单排序 **数组**: 数组是一种基本的数据结构,用于存储相同类型的多个元素。在Java中,数组可以是一维、多维,甚至混合维度的。数组的元素可以通过索引访问,索引...

    Java数据结构和算法.(第二版)

    《Java数据结构和算法》第二版是一本深入探讨如何在Java编程环境中实现和应用数据结构与算法的权威著作。本书旨在帮助读者理解并掌握这些基础知识,以便在实际开发中能够高效地解决问题。数据结构和算法是计算机科学...

    JAVA语言程序设计与数据结构第十版基础篇答案.rar

    《JAVA语言程序设计与数据结构第十版基础篇答案》是一个为学习Java编程和数据结构的学生提供的参考资料。这个压缩包包含了作者精心整理的课后习题解答,旨在帮助学生理解和掌握课程中的关键概念,并通过实际编程练习...

    Java数据结构

    Java数据结构,基本的数据结构整理。希望帮助到大家的学习!

Global site tag (gtag.js) - Google Analytics