java集合的理解,java集合概念

  java集合的理解,java集合概念

  迭代器集合框架中的00-1010接口特定集合哈希码树集合队列优先级队列映射基本映射视图弱哈希映射链接哈希集合映射枚举集合和映射标识哈希映射Java的原始版本只提供了常用数据结构的几个类:Vector、Stack、Hashtable、BitSet和Enumeration接口。

  

目录
公共接口集合{布尔add(E元素);iterator iterator();}//迭代器接口包含四个方法:公共接口迭代器{ E next();布尔型has next();void remove();默认void forEachRemainint(消费者?超E行动);}通过反复调用next方法,朱粲兄弟访问集合中的每个元素。但是,如果到达集合的末尾,下一个方法将抛出NoSuchElementException。因此,您需要在调用Next之前调用hasNext方法。

  集合字符串c=.//普通循环迭代器string iterator=c . iterator();while(ITER . has next()){ String element=ITER . next();//用element}//做点什么另外,同样的操作可以用for-each循环更简洁地表达出来。编译器只是把它转换成一个循环for(String Element 3360 c){//用元素做点什么}//用迭代器。不用写循环,可以调用方法,提供一个Lambda表达式迭代器string iterator=c . iterator();iterator . foreach remaining(element-/*用它做点什么*/);Java类库中的迭代器搜索操作与位置变化的耦合更加紧密。查找元素的唯一方法是调用next,迭代器位置将随着搜索操作向前移动。因此,可以认为Java迭代器位于两个元素之间。调用next时,迭代器遍历下一个元素,并返回刚刚遍历的元素的引用。

  迭代器接口的remove方法删除上次调用 next 方法时返回的元素.在next方法和remove方法调用之间存在依赖关系。如果在调用remove之前未调用next,将引发IllegalStateException异常。

  //如果要删除两个相邻的元素,不能直接调用it . remove();it . remove();//错误//实际上需要到要删除的元素it.remove()旁边;it . next();it . remove();//好的

  00-1010集合有两个基本接口:集合和映射。

  List是一个有序的集合。有两种方法可以访问元素:迭代器访问或使用整数索引。后一种方法称为随机访问,因此可以按任何顺序访问元素。相反,当使用迭代器访问时,必须顺序访问元素。

  * *滑* *:这个地方收藏框架设计的不好。实际上有两种有序集,它们的性能代价差别很大。1.array支持的有序集可以快速随机访问,因此适合使用List方法并提供整数索引访问。2.虽然链表也是有序的,但是随机访问是* *慢* *,最好用迭代器遍历。为了避免对链表的随机访问,Java 1.4引入了* tag接口* ` Random Access ,它不包含任何方法。但是可以用来测试一个特定的集合是否支持高效的随机访问:` if (c实例随机访问){/*使用随机访问算法*/} ` else {/*使用qequential访问算法*/} `Set接口等价于Collec。

  tion 接口,不过其方法的行为有更严谨的定义。

  

  

具体集合

集合类型描述ArrayList可以动态增长和缩减的一个索引序列LinkedList可以在任何位置高效插入和删除的一个有序序列ArrayDeque实现为循环数组的一个双端队列HashSet没有重复元素的一个无需集合TreeSet一个有序集EnumSet一个包含枚举类型值得集LinkedHashSet一个可以记住元素插入次序的集PriorityQueue允许高校删除最小元素的一个集合HashMap存储键/值关联的一个数据结构TreeMap键有序的一个映射EnumMap键属于枚举类型的一个映射LinkedHashMap可以记住键/值项添加次序的一个映射WeakHashMap值不会再别出使用时就可以被垃圾回收的一个映射IdentityHashMap用==而不是equal比较键的一个映射

  

  

散列码

散列码可以用于快速第查找对象

  在 Java 中,散列表用链表数组实现。每个列表被称为桶。 在 Java 8 中,桶满时会从链表变为平衡二叉树,以提高性能。标准类库使用的桶数是 2 的幂,默认值为 16(为表大小提供的任何值都将自动地转换为 2 的下一个幂值)。

  如果散列表太满,就需要再散列。此时,就需要创建一个桶数更多的表,并将所有的元素插入到这个新表中,然后丢弃原来的表。装填因子(默认0.75)可以确定何时对散列表进行散列,新表的桶数是原来的两倍。

  

  

树集

树集是一个有序集合,可以以任意顺序将元素插入到集合中。

  

每次将一个元素添加到树中,都会将其放置在正确的排序位置上。因此,迭代器总是以有序的顺序访问每个元素。将一个元素添加到树中要比添加到散列表中慢。但是,检查数组或链表中的重复元素时,树会快很多。

  注: 要使用树集,必须能够比较元素。这些元素必须实现 Comparable 接口,或者构造集时必须提供一个 Comparator。

  

  

队列

队列允许高校地在尾部添加元素,并在头部删除元素。不支持在队列中间添加元素

  Java 6 中引入了 Deque 接口,ArrayDeque 和 LinkedList 类实现了这个接口。

  

  

优先队列

优先队列中的元素可以按照任意的顺序插入,但会按照有序的顺序进行检索。

  

无论何时调用 remove 方法,总会获得当前优先队列中最小的元素。优先队列并没有对所有元素进行排序,而是使用了一个高效地数据结构——堆。堆是一个可以自组织的二叉树,其添加与删除操作可以让最小的元素移动到根,而无需花费时间对元素进行排序。

  

  

映射

映射数据结构用于存放键/值对,知道某些关键信息,可以查找与之关联的元素。

  

  

基本映射

Java类库我映射提供了两个通用的实现:HashMapTreeMap

  

  

映射视图

集合框架不认为映射本身是一个集合。(其他数据结构框架认为映射是一个键/值对集合,或者是按键索引的值集合)。不过,可以得到视图——实现了 Collection 接口或某个子接口的对象。

  keySet()values()entrySet()

  注: keySet 不是 HashSet 或 TreeSet,而是实现了 Set 接口的另外某个类的对象。

  可以在集视图中删除元素,它们将从该映射中删除,但是不能添加任何元素

  

  

弱散列映射

WeakHashMap类使用弱引用保存键。WeakReference 对象将包含另一个对象的引用,在这里,就是一个散列表键。正常情况下,如果垃圾回收器发现某个特定的对象已经没有他人引用,就会将其回收。然而,如果某个对象只能由 WeakReference 引用,垃圾回收器也会将其回收,但会将这个对象的弱引用放进一个队列。WeakHashMap 将周期性地检查队列,以便找出新添加的弱引用。一个若引用进入队列意味着这个键不再被他人使用,并且已经回收。于是,WeakHashMap 将删除相关联的映射。

  

  

链接散列集合映射

LinkedHashMapLinkedHashSet会记住插入元素项的顺序。

  

  

枚举集与映射

EnumSet是一个枚举类型元素集的高效实现。内部用位序列实现。

  EnumMap是一个键类型为枚举类型的映射

  

  

标识散列映射

IdentityHashMap类有特殊用途。该类中,键的散列值由 System.identityHashCode 计算,是根据对象的内存地址计算散列码所使用的方法。因此在比较对象时采用==,不同的键对象即使内容相同,也被视为不同的对象。

  在实现对象遍历算法(如对象串行化)时,这个类十分有用,可以用来跟踪哪些对象已经遍历过。

  到此这篇关于Java常用集合与原理解析的文章就介绍到这了,更多相关Java集合与原理内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: