资讯专栏INFORMATION COLUMN

Java 持有对象(11)

summerpxy / 702人阅读

摘要:如果一个程序只包含固定数量且其生命周期都是已知的对象,那么这是一个非常简单的程序。

如果一个程序只包含固定数量且其生命周期都是已知的对象,那么这是一个非常简单的程序。

1.泛型和类型安全的容器

通过使用泛型,可以在编译期防止将错误类型的对象放置到容器中.

2.基本概念

Java容器类库的用途是"保存对象",并将其划分为两个不同的概念:CollectionMap.

Collection:一个独立元素的序列,这些元素都服从一条或多条规则.

Map:一组成对的"键值对"对象,允许你使用键来查找值.

3.添加一组元素

在java.util包中的Arrays和Collections类中都有很多实用方法,可以在一个Collection中添加一组元素.

4.容器的打印

默认的打印行为(使用容器提供的toString()方法)即可生成可读性很好的结果.

5.List

List承诺可以将元素维护在特定的序列中.List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素.

有两种类型的List:ArrayList,LinkedList.

ArrayList:擅长于随机访问元素,但是在List的中间插入和移除元素时比较慢.

LinkedList:在随机访问方面相对比较慢,但是它的特性集较ArrayList更大.

6.迭代器

任何容器类,都必须有某种方式可以插入元素并将它们再次取回.

迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构.

迭代器通常被称为轻量级对象:创建它的代价小.

ListIterator是一个更加强大的Iterator的子类型,它只能用于各种List的访问.

7.LinkedList

LinkedList也像ArrayList一样实现了基本的List接口,但是它执行某些操作(在List的中间插入和移除)时比ArrayList更高效,但在随机访问操作方面却要逊色一些.

LinkedList还添加了可以使其用作栈,队列或双端队列的方法.

8.栈

"栈"通常是指"后进先出"(LIFO)的容器.有时栈也被称为叠加栈.

LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用.

9.Set

Set不保存重复的元素.

Set具有与Collection完全一样的接口,因此没有任何额外的功能.

实际上Set就是Collection,只是行为不同.

Set是基于对象的值来确定归属性的(Set中最常被使用的是测试归属性:contains()).

10.Map

将对象映射到其他对象.

11.Queue

Queue是一个典型的先进先出(FIFO)的容器.

队列在并发编程中特别重要,因为它们可以安全地将对象从一个任务传输到另一个任务.

LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现.

PriorityQueue:优先级队列声明下一个弹出元素就是最需要的元素(具有最高的优先级).

12.Collection和Iterator

Collection是描述所有序列容器的共性的跟接口,它可能会被认为是一个"附属接口",即因为要表示其他若干个接口的共性而出现的接口.

容器之间的共性是通过迭代器达成的,而不是Collection来表示.但是,这个两个方法绑定到了一起,因为实现Collection就意味着需要提供iterator()方法.

13.Foreach与迭代器

Java SE5引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动.

在Java SE5中,大量的类都是Iterable类型,主要包括所有的Collection类(但是不包括各种Map).

适配器方法的惯用法.

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71666.html

相关文章

  • Java编程思想》笔记11.持有对象

    摘要:迭代器通常被成为轻量级对象创建它的代价很小。与迭代器可以用于数组和所有对象,之所以能够工作,是因为继承了接口。 点击进入我的博客 我觉得本章名字改成容器似乎更好理解,持有对象让人感到一头雾水我们需要在任意时刻和任意位置创建任意数量的对象,所以依靠创建命名的引用来持有对象已经满足不了需求。Java可以用数组和其他容器类来(List、Set、Queue、Map)来解决这个问题,不同的容器...

    newtrek 评论0 收藏0
  • (Thinking in Java)第11持有对象

    摘要:迭代器解决了这个问题。删除后于是我们可以写一个方法,接受一个类型,然后让他调用方法,这就不需要考虑这个是个还是了,也就是说,可以将遍历容器的操作与序列底层的结构分离,迭代器统一了对容器类的访问方式。十二和两种遍历的方法,与迭代器方法。 一、泛型和类型安全的容器 package tij.hoding; import java.util.ArrayList; public class ...

    v1 评论0 收藏0
  • Java编程思想》-- 持有对象 -- 添加一组元素

    摘要:方法接受一个对象,以及一个数组或是一个用逗号分隔的列表,并将元素添加到中。工作的很好,因为他从第一个参数中了解到了目标类型是什么。 ArrayList.asList() 接受一个数组或是用逗号分隔的元素列表,也可以用可变参数,然后将其转为一个List对象。 Collections.addAll()方法接受一个Collection对象,以及一个数组或是一个用逗号分隔的列表,并将元素添加...

    tomlingtm 评论0 收藏0
  • 第十一章 持有对象

    摘要:允许从任一方向来遍历对象,并在遍历迭代过程中进行修改该对象,还能获得迭代器的当前位置。这个构造函数是将返回了一个对象给,这也是的存储实现原理。 一、容器产生的原因   1.数组的缺点:大小一旦给定就无法更改,除非复制到一个新的数组中,开销大;而容器类都可以自动地调整自己的尺寸。  2.容器功能的多样性:容器可以实现各种不同要求,如按不同依据将元素进行排序或者保证容器内无重复元素等等。关...

    archieyang 评论0 收藏0
  • 并发编程之死锁解析

    摘要:如何检测死锁由于死锁极难通过人工的方式查出来,因此提供了命令来检测某个进程中心线程的情况,并排查有没有死锁。线程持有的锁,等待的锁。避免出现死锁,如果出现了死锁,则可以使用命令查看线程是否有死锁。 showImg(https://segmentfault.com/img/remote/1460000014936757); 前言 在 Java 的并发编程中,有一个问题需要特别注意,那就是...

    yy736044583 评论0 收藏0

发表评论

0条评论

summerpxy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<