java 刽子手游戏_java基础(九):容器

集合的引入

List (ArrayList LinkedList)

Set (HashSet LinkedHashSet TreeSet )

Map (HashMap LinkedHashMap TreeMap)

Collections

Iterator

使用泛型

1.为什么使用集合而不是数组?

集合和数组相似点

都可以存储多个对象,对外作为一个整体存在

数组的缺点

长度必须在初始化时指定,且固定不变

数组采用连续存储空间,删除和添加效率低下

数组无法直接保存映射关系

数组缺乏封装,操作繁琐

2.集合架构

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

009086139a90f0c5001d8f2a78739bb4.png

Collection 接口存储一组不唯一,无序的对象

List 接口存储一组不唯一,有序(索引顺序)的对象

Set 接口存储一组唯一,无序的对象

Map接口存储一组键值对象,提供key到value的映射

Key 唯一 无序

value 不唯一 无序

2.1 List

特点:有序  不唯一(可重复)

ArrayList:ArrayList是一个对数组进行了封装的容器。使用过程中ArrayList对于数据的查找及遍历效率较高。

在内存中分配连续的空间,实现了长度可变的数组

优点:遍历元素和随机访问元素的效率比较高

缺点:添加和删除需大量移动元素效率低,按照内容查询效率低,

ArrayList常用方法

Add() :向现有集合中添加或插入一个元素

Get() :获取指定索引位置的元素

Set() :设置指定索引位置的元素值

Clear() :清除所有的元素值

Remove() :删除指定索引位置的元素

Size() :获取容器中元素的个数

LinkedList:LinkedList在底层是一双向链表的形式进行实现,LinkedList在执行数据的维护过程中效率较高。LinkedList允许以队列或栈的方式访问数据。

采用链表存储方式。

缺点:遍历和随机访问元素效率低下

优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可。如果插入删除发生在头尾可以减少查询次数)

LinkedList常用方法:

getFirst() :获取列表中的第一个元素

getLast() :获取列表中的最后一个元素

peek() :以队列的方式获取列表数据(获取不删除)

poll() :以队列的方式获取列表数据(获取并删除)

push() :以栈的方式将数据压入到列表中

pop() :以出栈的方式访问元素(获取并删除)

其他方法参见ArrayList

List的遍历方法

for

for-each

Iterator迭代器

集合中内容是否相同

通过equals进行内容比较,而是==引用比较

2.2 Set

特点:无序 唯一(不重复)

HashSet

采用Hashtable哈希表存储结构(神奇的结构)

优点:添加速度快 查询速度快 删除速度快

缺点:无序

HashSet常用方法:

Add() :向集合中添加一个元素

Clear() :清除集合中所有元素

Remove() :按照元素之删除集合中指定的元素

注意:HashSet中不支持下标方式访问及修改元素值。

LinkedHashSet

采用哈希表存储结构,同时使用链表维护次序

有序(添加顺序)

2590d46224aa5f627788f65d5563d0cf.png

TreeSet

采用二叉树(红黑树)的存储结构

优点:有序 查询速度比List快(按照内容查询)

缺点:查询速度没有HashSet快

f0b5d67fa29aa9cf2af4ec73da35eed1.png

Set常用方法

Set相对Collection没有增加任何方法

Set的遍历方法

for-each

Iterator迭代器

无法使用for进行遍历(因为无序,所以没有get(i))

HashSet、HashMap或Hashtable中对象唯一性判断

重写其hashCode()和equals()方法

TreeSet中指明排序依据

实现Comparable接口 创建实现Compator接口的类。

哈希表存储原理

2.3 Map

特点 key-value映射

HashMap

Key无序 唯一 (Set)

Value 无序 不唯一 (Collection)

LinkedHashMap

有序的HashMap 速度快

TreeMap

有序 速度没有hash快

问题:Set和Map有关系吗?

采用了相同的数据结构,只用于map的key存储数据,就是Set

3. Collections

专门用来操作集合的工具类

构造方法私有,禁止创建对象

提供一系列静态方法实现对各种集合的操作

具体操作:搜索、复制、排序、线程安全化等

常用方法

Collections.addAll(list, "aaa","bbb","ccc","ccc");

int index = Collections.binarySearch(list, "ccc");

Collections.copy(list2, list);

Collections.fill(list3, "888");

String max = Collections.max(list4);

String min = Collections.min(list4);

Collections.reverse(list4);

List list5 = Collections.synchronizedList(list4);

4. Iterator

所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。

迭代器为集合而生,专门实现集合遍历

Iterator是迭代器设计模式的具体实现

Iterator方法

boolean hasNext(): 判断是否存在另一个可访问的元素

Object next(): 返回要访问的下一个元素

void remove(): 删除上次访问返回的对象。

问题:可以使用Iterator遍历的本质是什么

实现Iterable接口

For-each循环

增强的for循环,遍历array 或 Collection的时候相当简便

无需获得集合和数组长度,无需使用索引访问元素,无需循环条件

遍历集合时底层调用Iterator完成操作

For-each缺陷:

数组:

不能方便的访问下标值

不要在for-each中尝试对变量赋值,只是一个临时变量

集合:

与使用Iterator相比,不能方便的删除集合中的内容

For-each总结:

除了简单遍历并读出其中的内容外,不建议使用增强for

5.泛型

JDK1.4以前类型不明确: 装入集合的类型都被当作Object对待,从而失去自己的实际类型。 从集合中取出时往往需要转型,效率低,容易产生错误。

泛型:在定义集合的时候同时定义集合中对象的类型

好处: 增强程序的可读性和安全性

6.术语辨析

集合和数组的比较

Collection和Collections的区别

ArrayList和LinkedList 的联系和区别

Vector和ArrayList的联系和区别

HashMap和Hashtable的联系和区别

集合和数组的比较:

数组不是面向对象的,存在明显的缺陷,

集合完全弥补了数组的一些缺点,比数组更灵活更实用,

可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。具体如下:

1:数组能存放基本数据类型和对象,而集合类中只能放对象。

2 : 数组容量固定且无法动态改变,集合类容量动态改变。

3:数组无法判断其中实际存有多少元素,length只告诉了array容量

4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式

5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率

ArrayList和LinkedList 的联系和区别

联系: 都实现了List接口 有序 不唯一(可重复)

ArrayList

在内存中分配连续的空间,采用了顺序表结构,实现了长度可变的数组

优点:遍历元素和随机访问元素的效率比较高

缺点:添加和删除需大量移动元素效率低,按照内容查询效率低,

LinkedList

采用链表存储方式。

缺点:遍历和随机访问元素效率低下

优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可。如果插入删除发生在头尾可以减少查询次数)

Collection和Collections的区别:

Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。

Java中还有一个Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

Vector和ArrayList的联系和区别:

实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用

两者的主要区别如下:

Vector是早期JDK接口,ArrayList是替代Vector的新接口

Vector线程安全,ArrayList重速度轻安全,线程非安全

长度需增长时,Vector默认增长一倍,ArrayList增长50%

HashMap和Hashtable的联系和区别

实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用

两者的主要区别如下:

Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口

Hashtable继承Dictionary类,HashMap实现Map接口

Hashtable线程安全,HashMap线程非安全

Hashtable不允许null值,HashMap允许null值

7.小结

83ac6ff11a598b87cbb53e98c3c65fa7.png

104c64365d812284368104ca9ccacd0e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java异常处理方式推荐做法_谈谈Java异常处理这件事儿

此文已由作者谢蕾授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。前言我们对于“异常处理”这个词并不陌生,众多框架和库在异常处理方面都提供了便利,但是对于何种处理才是最佳实践,也是众说纷纭。异常处…

java 抽象类 final_final/抽象类/interface

lesson Thirteen                          2018-05-10 02:10:43final:最终的,可以修饰类、属性、方法1.final修饰类:这个类就不能被继承,如:String类,StringBuffer类,System类1…

java io中断_JDK源码阅读:InterruptibleChannel 与可中断 IO

来源:木杉的博客 ,imushan.com/2018/08/01/java/language/JDK源码阅读-InterruptibleChannel与可中断IO/Java传统IO是不支持中断的,所以如果代码在read/write等操作阻塞的话,是无法被中断的。这就无法和Thead的interrupt模型配合使…

java值栈_Struts2学习笔记-Value Stack(值栈)和OGNL表达式

只是本人的Struts2学习笔记,关于Value Stack(值栈)和OGNL表达式,把我知道的都说出来,希望对大家有用。一,值栈的作用记录处理当前请求的action的数据。二,小例子有两个action:Action1和Action2Action1有两个…

php 接口日志,PHP 开发 APP 接口--错误日志接口

APP 上线以后可能遇到的问题:① APP 强退② 数据加载失败③ APP 潜在问题错误日志需要记录的内容数据表 error_log 字段:idapp_id:app 类别 iddid:客户端设备号version_id:版本号version_mini:小版本号erro…

php cannot call constructor,安装ECshop普遍问题的解决方法

安装时的问题:1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in /usr/local/httpd2/htdocs/upload/install/includes/lib_installer.php on line 31解决:找到install/includes/lib_installer.php中的…

zblog php和asp功能,ZBlog是否适合PHP或ASP?我们该如何选择?

我最近玩了zblog一段时间,对于大多数第一次联系zblog的博客,他们会问zblog是否适合PHP或ASP?我们该如何选择?事实上,我真的不明白这个问题。我个人更喜欢PHP。今天我将整理出来并对PHP版本和ASP版本进行比较&#xff0…

php决策管理,报表管理与数据分析:为系统未来发展规划提供决策依据,有效避免IT管理与投资的盲目??...

据了解,很多中大型企事业单位的IT基础结构具有复杂、分散等特征,并且信息化程度越高,数据类型越繁杂,数据量也越庞大。许多单位不得不付出极大的人力、物力对网络进行管理。而一个单位的信息化的程度和IT部门的服务水平&#xff0…

设置linux拨号服务端,CentOS Linux上搭建PPPoE服务器及拨号设置

CentOS下PPPoE拨号设置1.查看并安装拨号软件:[rootRedHat ~]# rpm -qa|grep pppoe[rootredhat ~]# yum -y install rp-pppoerp-pppoe.i686 0:3.10-8.el62.查看adsl-setup命令所在位置:[rootredhat ~]#whereis adsl-setupadsl-setup:或者直接搜索pppoe信息…

linux上pyenv卸载,在Ubuntu 18.04系统下安装pyenv的方法

本文介绍在Ubuntu 18.04操作系统下安装pyenv的方法,使用它可以进行Python多版本管理,目的是防止不同的Python版本因为不兼容而出现错误。安装pyenv其实非常的简单,只需要在系统终端中运行一条命令即可,以下是操作方法,…

linux防火墙作用是什么,Linux防火墙操作1

什么是防火墙防火墙可通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,以此来实现网络的安全保护。简单来讲 就是防止外界通过网络攻击Linux服务器的一个软件本次学习目标:防火墙的启停&#xff0…

lede 自定义linux,OpenWrt 和 LEDE 宣布正式合并

OpenWrt 和 LEDE 项目已在官网正式宣布合并,合并后的项目仍用 OpenWRT 命名。合并后的 OpenWrt 项目将按照 LEDE 制定的规范进行管理。原有的 LEDE 和 OpenWrt 项目的活跃成员将继续在合并后的 OpenWrt 上工作。LEDE 项目是 OpenWrt 的一个衍生项目,曾被…

旧衣回收小程序搭建有什么优势?

今年以来,旧衣回收行业分外火热,不断有创业者进入到市场中,其中不乏有年轻人,足以可见行业的火爆。 我国是人口大国,每个人闲置的衣物加在一起的数量难以计算,旧衣回收行业具有巨大的发展空间。 此外&…

c语言程序兔子反之问题,C语言解决兔子产子问题代码及解析

有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数为多少?问题分析兔子数的规律,如下表所示:月数小兔子对数中…

c语言fork()创建线程,操作系统的创建原语是fork()还是creat()?

满意答案MythSwift2013.09.10采纳率:55% 等级:12已帮助:9461人一个进程就相当于一个主线程。fork一个进程与create一个线程的区别:fork进程:子进程复制父进程的进程环境。父进程结束不会影响子进程的运行。进程切换复制进程环境。create线…

android 最新 support,android support v7 下载-android support.v7包 官方最新版 - 河东下载站...

android support v7是一款功能非常实用的android在进行开发的过程中,必须要进行使用的一个包;这款软件作为一个功能非常全面的功能包,也是目前为止最新的功能包,是您这使用Android开发的时候,非常重要的一环&#xff1…

android aar jar制作,AndroidStudio aar、jar生成及其引用

aar生成新建项目,并在项目中新建Library module:banner,如图:在新建Module中编写完代码后,build整个工程后就会自动生成aar包,包的路径在新建Module 》 build 》outputs >aar目录下;aar引用在…

android 点击侧滑代码,代码分析Android实现侧滑菜单

Android 侧滑菜单的实现,参考网上的代码,实现侧滑菜单。最重要的是这个动画类UgcAnimations,如何使用动画类来侧滑的封装FlipperLayout。1、实现效果2、动画类UgcAnimationspackage com.mmsx.base;import android.content.Context;import and…

html游戏怎么编辑器,HTML的编辑器使用

使用 Notepad 或 TextEdit 来编写 HTML可以使用专业的 HTML 编辑器来编辑 HTML:Adobe DreamweaverMicrosoft Expression WebCoffeeCup HTML Editor(推荐学习:HTML入门教程)不过,我们同时推荐使用文本编辑器来学习 HTML,比如 Notep…

鸿蒙系统hifi,Apple Music将迎来重大更新 HiFi无损音质即将上线?

原标题:Apple Music将迎来重大更新 HiFi无损音质即将上线?前不久有媒体报道称,苹果将在当地时间5月18日推出HiFi版AppleMusic服务,新服务将为Apple Music用户提供无损的流媒体音乐,满足HiFi用户对高音质的追求。而在近…