Java容器类详解
Java的容器
在Java中,我们想要保存对象可以使用很多种手段。最简单的就是数组。但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。
Java的容器类分为List,Set,Queue和Map。
Java容器的基本概念
Java容器类库是用来保存对象的,他有两种不同的概念:
- Collection,独立元素的序列,这些元素都服从一条或多条规则。List、Set以及Queue都是Collection的一种,List必须按照顺序保存元素,而Set不能有重复元素,Queue需要按照排队规则来确定对象的顺序。
- Map,Map是键值对类型,允许用户通过键来查找对象。Hash表允许我们使用另一个对象来查找某个对象。
Collection接口
尽管存在这两种概念,我们在工程中,大部分代码还是和接口打交道。Collection是最基本的集合接口。一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”。ArrayList,HashSet等具体类均实现了Collection接口或Collection接口的子接口(List接口和Set接口等)。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
Java使用泛型来实现容器类,例如我们要使用顺序表这一数据结构,Java提供了ArrayList和LinkedList两种实现类,ArrayList的实现就是基于数组的。比如我们要存储一组用户,在Java8之前的版本,我们就可以这样声明对象:List<User> users = new ArrayList<User>();。然后通过add方法来添加变量。
迭代器
从之前的Collection接口中可以看出,任何容器类,都可以以某种方式插入、获取和删除元素。add()作为最基本的插入元素方法而get()则是基本取元素的方法。
但是如果我们仅仅使用get和add方法来进行元素操作,如果将一个类的方法实现了,如果想要将相同的代码用在其他容器类中就会遇到问题,那么我们如何解决这一问题呢?
在这里我们就引入了面向对象的设计模式迭代器模式。迭代器是一个对象,它的工作是遍历并选择序列中的对象。客户端不需要知道序列的底层架构。
Java的Iterator的定义如下:
public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }
我们可以使用:
- next()方法来获取序列的下一个元素。
- hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新近返回的元素删除。比如我们要遍历一个容器:
List<String> keywords = new ArrayList<>(); keywords.add("hello"); keywords.add(0, "thank"); Iterator<String> iterator = keywords.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
当然也可以使用foreach语法进行遍历:
List<String> keywords = new ArrayList<>(); keywords.add("hello"); keywords.add(0, "thank"); for (String keyword : keywords) { System.out.println(iterator.next()); }
Iterator还有一些功能更为强大的子类型,我们会在下文予以介绍。
参考:
http://blog.csdn.net/u014136713/article/details/52089156
https://www.tianmaying.com/tutorial/java_collection
我们可以使用:
- next()方法来获取序列的下一个元素。
- hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新近返回的元素删除。比如我们要遍历一个容器:
List<String> keywords = new ArrayList<>();keywords.add("hello");keywords.add(0, "thank");Iterator<String> iterator = keywords.iterator();while (iterator.hasNext()) { System.out.println(iterator.next());}
当然也可以使用foreach语法进行遍历:
List<String> keywords = new ArrayList<>();keywords.add("hello");keywords.add(0, "thank");for (String keyword : keywords) { System.out.println(iterator.next());}
Iterator还有一些功能更为强大的子类型,我们会在下文予以介绍。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Thread源码剖析
前言 昨天已经写了: 多线程三分钟就可以入个门了! 如果没看的同学建议先去阅读一遍哦~ 在写文章之前通读了一遍《Java 核心技术 卷一》的并发章节和《Java并发编程实战》前面的部分,回顾了一下以前写过的笔记。从今天开始进入多线程的知识点咯~ 我其实也是相当于从零开始学多线程的,如果文章有错的地方还请大家多多包含,不吝在评论区下指正呢~~ 一、Thread线程类API 声明本文使用的是JDK1.8 实现多线程从本质上都是由Thread类来进行操作的~我们来看看Thread类一些重要的知识点。Thread这个类很大,不可能整个把它看下来,只能看一些常见的、重要的方法。 顶部注释的我们已经解析过了,如果不知道的同学可前往:多线程三分钟就可以入个门了! 1.1设置线程名 我们在使用多线程的时候,想要查看线程名是很简单的,调用Thread.currentThread().getName()即可。 如果没有做什么的设置,我们会发现线程的名字是这样子的:主线程叫做main,其他线程是Thread-x 下面我就带着大家来看看它是怎么命名的: nextThreadNum()的方法实现是这样的: 基于...
- 下一篇
【python进阶】详解元类及其应用1
前言 元类在python中是很重要的一部分,我将分两次去讲解元类及其应用,此篇为详解元类及其应用第一篇,下面开始今天的说明~~~ 1. 类也是对象 在⼤多数编程语⾔中,类就是⼀组⽤来描述如何⽣成⼀个对象的代码段。在 Python中这⼀点仍然成⽴: >>> class ObjectCreator(object): … pass … >>>my_object = ObjectCreator() >>>print(my_object) <__main__.ObjectCreator object at 0x8974f2c> 但是,Python中的类还远不⽌如此。类同样也是⼀种对象。是的,没错,就是对象。只要你使⽤关键字class,Python解释器在执⾏的时候就会创建⼀个 对象。下⾯的代码段: >>> class ObjectCreator(object): ... pass ... 将在内存中创建⼀个对象,名字就是ObjectCreator。这个对象(类对象 ObjectCreator)拥有创建对象(实例对...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7设置SWAP分区,小内存服务器的救世主