block是如何java 持有对象象的

为解决数组固定尺寸的限制,java类库提供容器类来解决这问题。其中包括List,Set,Map,Queue,也称集合类。编程时可以将任意数量的对象置于容器,不用在意容器大小。

  • Collection:独立的序列,元素服从一条或多条规则。其中List按照插入的顺序保持元素,Set不能有重复元素,Queue按照排队规则确定对象产生的顺序。
  • Map:一组成对的键值对对象,允许用键查找,ArrayList允许用数字查找值。

  • Arrays.asList()接受一个数组或是逗号分隔的元素列表,将其妆化为List对象;

可以直接使用Arrays.asList()的输出,将其作为List,此时,底层表示为数组,无法调整尺寸,若用add(),delete()添加或删除元素,会引发改变数组尺寸,产生错误。

List可以将元素维护在特定的序列中,有两种类型List:

  • ArrayList:随机访问元素快速,在List中插入和移除元素比较慢
  • LinkedList:通过代价较低的在List中进行插入删除,提供了优化的顺序访问,LinkedList在随机访问方面比较慢,但特性集比ArrayList更大。

具体方法操作如下例所示:

//set()设值,在指定索引处,替换位置上的元素

迭代器(设计模式)是一个对象,用来遍历并选择序列中的对象,通常被称为轻量级对象,创建代价小。Java的Iterator只能单向移动。

  • 使用next()获得序列中下一个元素;
  • 使用hasNext()检查序列中是否还有元素;
  • remove()将迭代器返回的元素删除;

若是所创建的List能把相同的代码应用于Set,将显得很方便,代码重组显然不适合,所以我们使用迭代器。创建一个display()方法:

LinkedList随机访问比ArrayList逊色,但是元素的插入删除比ArrayList迅速的多。LinkedList添加了栈,队列,双端队列的方法。

  • peek():同上,只是列表为空时,返回null;
  • removeLast():移除并返回列表最后一个元素;

“栈”称为“先进后出”(LIFO)容器。有时也称作叠加栈。最后压入的元素,最后一个弹出。LinkedList可以实现Java中的栈。

Set不保存重复元素,常用作测试归属性可以很容易判断对象是否在Set中,加快了对快速查询的优化。
Set有着与Collection完全一样的接口,没有任何额外功能,只是行为不同而已。如下为Set示例:

由运行结果可知,HashSet和TreeSet按顺序输出,以往的HashSet使用的是散列,现在或许已经改变了元素存储方式,TreeSet存储在红黑树中,LinkedHashSet使用了散列存储,看起来更是使用了链表维护元素插入顺序。

若是想要列出一个文件上所有的单词时,可以使用net.mindview.TextFile工具,并将其写入Set中。

其中“\W+”表示正则表达式“一个或多个字母”。

队列是“先进先出”容器,容器一段放入元素,另一端取出。LinkedList支持队列的行为,实现了Queue接口,可以通过LinkedList向上转型为Queue。

Map是一种将对象与对象相关联的设计,HashMap设计用来快速访问,而TreeMap保持“键”始终处于排序状态,所以没有HashMap快,LInkedHashMap保持元素插入的顺序,但也通过散列提供快速访问的能力。
Map可以将对象映射到其他对象。例如,对Random产生的数字进行计数,键位Random产生的数字,值是数字出现的次数。

专业文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“专业文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取,非会员用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文库认证用户/机构上传的专业性文档,需要文库用户支付人民币获取,具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档。

3. TreeSet中的元素是排序的,默认按照字典升序,当然我们可以自己传入一个比较器来自定义排序。

参考资料

 

随机推荐