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搞定面试中的链表题目

packageLinkedListSummary;importjava.util.HashMap;importjava.util.Stack;/*** http://blog.csdn.net/luckyxiaoqiang/article/details/7393134 轻松搞定面试中的链表题目* http://www.cnblogs.com/jax/archive/2009/12/11/1621504.html 算法大全(1)单链表** 目录&#xff1a…

ccf认证俄罗斯方块java_CCF认证历年试题 - osc_h3robkrt的个人空间 - OSCHINA - 中文开源技术交流社区...

CCF认证历年试题不加索引整理会死星人orz第一题:CCF201712-1 最小差值(100分)CCF201703-1 分蛋糕(100分)CCF201612-1 中间数(100分)CCF201609-1 最大波动(100分)CCF201604-1 折点计数(100分)CCF201509-1 数列分段(100分)CCF201503-1 图像旋转(100分)CCF201412-1 门禁…

mysql 变量作表名查询_使用MySQL函数变量作为表名查询

我需要有一个表中增加一定的ID(如AUTO_INCREMENT)函数使用MySQL函数变量作为表名查询我有水木清华这样DELIMITER $$DROP FUNCTION IF EXISTS GetNextID$$CREATE FUNCTION GetNextID(tblName TEXT, increment INT)RETURNS INTDETERMINISTICBEGINDECLARE NextID INT;SELECT MAX(c…

java 签名 ecdsa_Java实现ECDSA签名算法

ECDSA签名算法package com.albedo.security;/*** DSA 加解密实现*/public class ECDSAUtils extends Base {//字符编码public static final String ALGORITHM "EC";public static final String SIGN_ALGORITHM "SHA1withECDSA";/*** ECDSA 验签** param …

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

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

as400和java的区别_文件传输协议和AS400

我目前收到以下错误:远程服务器返回错误:(501)参数或参数中的语法错误 .我已经检查了服务器并且文件确实存在,如果我打开命令提示符并键入以下代码它可以工作:ftpopen 192.168.1.2cd /Imagesget S12345.jpeg这是正常的&#xff0c…

java中同时两人提交数据_如何一起发送JSON请求和发布表单数据请求?

所以这是一个应该在POST请求中接受以下参数的API:token (as form data)apiKey (as form data){"notification": {"id": 1,"heading": "some heading","subheading": "some subheading","image&qu…

java 64内存不足_请教一个 Java 内存占用的问题

第 1 条附言 364 天前2020-03-04 01:08:55.525 [HikariPool-1 housekeeper] WARN c.z.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta1m5s643ms48?s450ns).2020-03-04 01:09:08.516 [task-11] ERROR o.s.s.s.TaskU…

java 抽象类 final_final/抽象类/interface

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

java char i=2+#039;2#039;;_P039 二维数组的字符按列存放到字符串中 ★★

所属年份:2010.9;2011.9;2012.3请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中的数据为W W W WS S S SH H H H则字符串中的内容应是:WSHWSHWSHWSH。#include#define M 3#d…

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流程管理实例代码分享

1. 添加新流程页面:请选择流程节点:session_start();include("../DBDA.class.php");$db new DBDA();$suser "select * from users";$auser $db->Query($suser);foreach($auser as $v){echo " {$v[2]} ";}?>$att…

php cdata,PHPcdata处理(详细介绍)_PHP教程

PHPcdata处理(详细介绍)_PHP教程当时在网上找了一个CDATA的转换器, 修改之后, 将CDATA标签给过滤掉。如下代码如下:// States://// out// // // // // // // // in// ]// ]]//// (Yes, the states a represented by strings.)//$state out;$a s…

PHP 与go 通讯,Golang和php通信

不同语言之间的通信方式有很多种,这里我介绍一种最简单通信方式,json-rpc。Golang自带json-rpc包,使用起来十分简单,示例如下,提供一个简单echo server。package mainimport ("fmt""net""net…

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

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

php 空模块,tp5.1配置空模块,空方法

config/app.php//默认的空模块名empty_module>index,controller/Error.php<?php namespace app\index\controller;use Env;use think\Controller;class Error extends Controller {//Db::connect(db_ck)//全局MISS路由 在route.php里面设置找不到控制器默认处理//Route:…

centos7php自启动,centos7系统下nginx安装并配置开机自启动操作

这篇文章主要介绍了centos7系统下nginx安装并配置开机自启动操作方法,非常不错&#xff0c;具有参考借鉴价值&#xff0c;需要的朋友可以参考下这篇文章主要介绍了centos7系统下nginx安装并配置开机自启动操作方法,非常不错&#xff0c;具有参考借鉴价值&#xff0c;需要的朋友…

时钟php,php+js液晶时钟

php代码$size_small5;//液晶宽度$size_big25;//液晶长度$distance10;//间距$color_back"#DDDDDD";$color_dark"#CCCCCC";$color_light"#000000";$number0;?>Timer|www.ibtf.net|www.bitefu.netfunction swapcolor(obj,onoff)//改变颜色{if (…

r和matlab学哪个,初学者求教‘r*’是什么意思啊

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼PLOT(X,Y,S) where S is a character string made from one elementfrom any or all the following 3 columns:b blue . point - solidg green o circle : dottedr red x x-mark -. dashdotc cyan plus -- dashedm magenta * star…