Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
jtn-zh
提交
b2d39606
J
jtn-zh
项目概览
OpenDocCN
/
jtn-zh
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jtn-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b2d39606
编写于
11月 23, 2019
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2019-11-23 20:42:11
上级
10692317
变更
36
隐藏空白更改
内联
并排
Showing
36 changed file
with
123 addition
and
123 deletion
+123
-123
docs/114.md
docs/114.md
+1
-1
docs/122.md
docs/122.md
+1
-1
docs/123.md
docs/123.md
+1
-1
docs/124.md
docs/124.md
+1
-1
docs/127.md
docs/127.md
+1
-1
docs/135.md
docs/135.md
+1
-1
docs/139.md
docs/139.md
+1
-1
docs/140.md
docs/140.md
+1
-1
docs/142.md
docs/142.md
+1
-1
docs/149.md
docs/149.md
+2
-2
docs/15.md
docs/15.md
+1
-1
docs/156.md
docs/156.md
+2
-2
docs/176.md
docs/176.md
+1
-1
docs/59.md
docs/59.md
+2
-2
docs/60.md
docs/60.md
+15
-15
docs/61.md
docs/61.md
+9
-9
docs/63.md
docs/63.md
+3
-3
docs/64.md
docs/64.md
+5
-5
docs/65.md
docs/65.md
+5
-5
docs/66.md
docs/66.md
+7
-7
docs/67.md
docs/67.md
+4
-4
docs/68.md
docs/68.md
+3
-3
docs/69.md
docs/69.md
+3
-3
docs/70.md
docs/70.md
+1
-1
docs/71.md
docs/71.md
+3
-3
docs/72.md
docs/72.md
+4
-4
docs/73.md
docs/73.md
+5
-5
docs/74.md
docs/74.md
+3
-3
docs/75.md
docs/75.md
+11
-11
docs/76.md
docs/76.md
+3
-3
docs/77.md
docs/77.md
+9
-9
docs/78.md
docs/78.md
+3
-3
docs/79.md
docs/79.md
+2
-2
docs/80.md
docs/80.md
+6
-6
docs/84.md
docs/84.md
+1
-1
docs/99.md
docs/99.md
+1
-1
未找到文件。
docs/114.md
浏览文件 @
b2d39606
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
本示例演示了如何使用 Servlet 的 doPost()方法来处理 POST 请求
本示例演示了如何使用 Servlet 的 doPost()方法来处理 POST 请求
在我们以前的教程
[
的 Java Servlet 实
施
例
](
https://javatutorial.net/java-servlet-example
)
我展示了 doGet()方法的使用。 现在,我将向您展示如何使用 doPost()方法来处理表单 POST 提交。 Java Servlet 可以处理各种类型的请求。 下面的列表显示了所有方法及其用途
在我们以前的教程
[
的 Java Servlet 实
现
例
](
https://javatutorial.net/java-servlet-example
)
我展示了 doGet()方法的使用。 现在,我将向您展示如何使用 doPost()方法来处理表单 POST 提交。 Java Servlet 可以处理各种类型的请求。 下面的列表显示了所有方法及其用途
|
**方法**
|
**SERVLET 方法**
|
**目的**
|
|
**方法**
|
**SERVLET 方法**
|
**目的**
|
| 得到 |
**doGet()**
| 在指定的 URL 检索资源 |
| 得到 |
**doGet()**
| 在指定的 URL 检索资源 |
...
...
docs/122.md
浏览文件 @
b2d39606
...
@@ -90,7 +90,7 @@ Java 文件上传表格
...
@@ -90,7 +90,7 @@ Java 文件上传表格
</
project
>
</
project
>
```
```
现在拥有所有必需的库,让我们继续实
施
REST 服务。 下面的代码中有几个地方我想提醒您注意。 首先请注意@Consumes(MediaType.MULTIPART_FORM_DATA)作为请求的编码类型的用法。 其次,如果愿意,您可能希望向该方法添加其他参数。 例如,您可能要在上传时传递一些描述或其他文本数据。 最后,如果您尝试将文件上传到不存在的目录中,Java 将抛出异常。 为了避免这个问题,我创建了方法 createFolderIfNotExists(StringdirName)。
现在拥有所有必需的库,让我们继续实
现
REST 服务。 下面的代码中有几个地方我想提醒您注意。 首先请注意@Consumes(MediaType.MULTIPART_FORM_DATA)作为请求的编码类型的用法。 其次,如果愿意,您可能希望向该方法添加其他参数。 例如,您可能要在上传时传递一些描述或其他文本数据。 最后,如果您尝试将文件上传到不存在的目录中,Java 将抛出异常。 为了避免这个问题,我创建了方法 createFolderIfNotExists(StringdirName)。
```
java
```
java
package
net.javatutorial.tutorials.services
;
package
net.javatutorial.tutorials.services
;
...
...
docs/123.md
浏览文件 @
b2d39606
...
@@ -90,7 +90,7 @@
...
@@ -90,7 +90,7 @@
```
```
## 实
施
Websocket 服务器
## 实
现
Websocket 服务器
我将使用 Glassfish 4.1 部署 WebSocket 服务器。 我们将使用 Jetty 9.x 作为 Websocket 服务器,而 Glassfish 已在 Jetty 中内置。 我们将使用的另一个 API 是 JSON API,它也是 Glassfish 4 的一部分。请查看下面的 Maven pom 文件以获取所需的依赖关系
我将使用 Glassfish 4.1 部署 WebSocket 服务器。 我们将使用 Jetty 9.x 作为 Websocket 服务器,而 Glassfish 已在 Jetty 中内置。 我们将使用的另一个 API 是 JSON API,它也是 Glassfish 4 的一部分。请查看下面的 Maven pom 文件以获取所需的依赖关系
...
...
docs/124.md
浏览文件 @
b2d39606
...
@@ -52,7 +52,7 @@ CREATE TABLE `user_groups` (
...
@@ -52,7 +52,7 @@ CREATE TABLE `user_groups` (
## 项目结构
## 项目结构
在开始实
施
项目的后端部分之前,我想向您展示项目结构。 这样,您将知道所有文件所在的位置
在开始实
现
项目的后端部分之前,我想向您展示项目结构。 这样,您将知道所有文件所在的位置
![](
img/7a9e5e0c8bc0b6c412ed33d495753d4d.jpg
)
![](
img/7a9e5e0c8bc0b6c412ed33d495753d4d.jpg
)
...
...
docs/127.md
浏览文件 @
b2d39606
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
本指南向您展示如何在 Eclipse 中安装 Spring Tool Suite
本指南向您展示如何在 Eclipse 中安装 Spring Tool Suite
[
STS
](
https://spring.io/tools/sts
)
代表
**Spring Tool Suite**
。 它提供了使用 Eclipse
[
IDE
](
https://javatutorial.net/choose-your-java-ide-eclipse-netbeans-and-intellij-idea
)
来实
施
,运行,调试和部署 Spring 应用程序的现成环境。 它是一个强大的环境,它将帮助您使 Spring 开发更快,更轻松。
[
STS
](
https://spring.io/tools/sts
)
代表
**Spring Tool Suite**
。 它提供了使用 Eclipse
[
IDE
](
https://javatutorial.net/choose-your-java-ide-eclipse-netbeans-and-intellij-idea
)
来实
现
,运行,调试和部署 Spring 应用程序的现成环境。 它是一个强大的环境,它将帮助您使 Spring 开发更快,更轻松。
## 如何在 Eclipse 中安装 Spring Tool Suite
## 如何在 Eclipse 中安装 Spring Tool Suite
...
...
docs/135.md
浏览文件 @
b2d39606
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
首先,我说过我们需要实现 HandlerInterceptor 接口,但是我们也可以实现 HandlerInterceptorAdapter 。 它们之间有 1 个区别,就是 HandlerInterceptor 我们必须覆盖我上面提到的所有三种方法,而 HandlerInterceptorAdapter 允许我们仅覆盖所需的方法 方法。
首先,我说过我们需要实现 HandlerInterceptor 接口,但是我们也可以实现 HandlerInterceptorAdapter 。 它们之间有 1 个区别,就是 HandlerInterceptor 我们必须覆盖我上面提到的所有三种方法,而 HandlerInterceptorAdapter 允许我们仅覆盖所需的方法 方法。
### 代码实
施
### 代码实
现
通常,这 3 种方法的工作流程会引发 Exception
**或返回 true 的**
。
通常,这 3 种方法的工作流程会引发 Exception
**或返回 true 的**
。
...
...
docs/139.md
浏览文件 @
b2d39606
...
@@ -36,7 +36,7 @@ public class Employee{
...
@@ -36,7 +36,7 @@ public class Employee{
}
}
```
```
您能明白为什么第二个例子更好吗? 因为现在员工无需担心公司的实现,所以它将独立于员工实
施
,并将提供给员工 ]通过构造函数,换句话说,是在 Employee 初始化时。 换句话说,如果没有公司的一部分,员工将无法生存。 否则,他就不会当雇员。
您能明白为什么第二个例子更好吗? 因为现在员工无需担心公司的实现,所以它将独立于员工实
现
,并将提供给员工 ]通过构造函数,换句话说,是在 Employee 初始化时。 换句话说,如果没有公司的一部分,员工将无法生存。 否则,他就不会当雇员。
依赖项(公司)通过构造函数注入到 Employee 类中。
依赖项(公司)通过构造函数注入到 Employee 类中。
...
...
docs/140.md
浏览文件 @
b2d39606
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
在我以前的教程
[
中,使用 STS 创建简单的 Spring Web App
](
https://javatutorial.net/spring-web-app-sts
)
,我向您展示了如何构建引入控制器的 Spring Boot App。 本教程是对上一个教程的扩展。
在我以前的教程
[
中,使用 STS 创建简单的 Spring Web App
](
https://javatutorial.net/spring-web-app-sts
)
,我向您展示了如何构建引入控制器的 Spring Boot App。 本教程是对上一个教程的扩展。
在开始实
施
之前,让我们快速概述一下控制器如何参与 MVC 工作流程。
在开始实
现
之前,让我们快速概述一下控制器如何参与 MVC 工作流程。
![
Spring MVC architecture workflow
](
img/8805b0798732fff068dcb2d8db411870.jpg
)
![
Spring MVC architecture workflow
](
img/8805b0798732fff068dcb2d8db411870.jpg
)
...
...
docs/142.md
浏览文件 @
b2d39606
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
> 原文: [https://javatutorial.net/what-is-dao-and-how-to-to-use-it](https://javatutorial.net/what-is-dao-and-how-to-use-it)
> 原文: [https://javatutorial.net/what-is-dao-and-how-to-to-use-it](https://javatutorial.net/what-is-dao-and-how-to-use-it)
在开始实
施
这些类之前,我们首先要了解什么是 DAO。 如果您已经知道 DAO 是什么,请随时跳转至代码示例。 如果没有,请忍受我。
在开始实
现
这些类之前,我们首先要了解什么是 DAO。 如果您已经知道 DAO 是什么,请随时跳转至代码示例。 如果没有,请忍受我。
![
spring-featured-image
](
img/d2f73752d8ae931b119dec1eac866973.jpg
)
![
spring-featured-image
](
img/d2f73752d8ae931b119dec1eac866973.jpg
)
...
...
docs/149.md
浏览文件 @
b2d39606
...
@@ -16,11 +16,11 @@
...
@@ -16,11 +16,11 @@
有两种方法可以防止 CSRF。
有两种方法可以防止 CSRF。
其中之一是通过实
施
相同的来源策略。 根据此策略,Web 浏览器允许一个网页中包含的脚本访问另一个网页
**中的数据,但前提是两个网页具有相同的来源。**
此方法取决于
[
HTTP Cookies
](
https://en.wikipedia.org/wiki/HTTP_cookie
)
。
其中之一是通过实
现
相同的来源策略。 根据此策略,Web 浏览器允许一个网页中包含的脚本访问另一个网页
**中的数据,但前提是两个网页具有相同的来源。**
此方法取决于
[
HTTP Cookies
](
https://en.wikipedia.org/wiki/HTTP_cookie
)
。
另一个是通过应用每个会话/每个请求令牌来过滤作为 CSRF 攻击而来的请求。
另一个是通过应用每个会话/每个请求令牌来过滤作为 CSRF 攻击而来的请求。
## Spring 实
施
中如何防止 CSRF
## Spring 实
现
中如何防止 CSRF
```
java
```
java
public
class
TokenFilter
extends
OncePerRequestFilter
{
public
class
TokenFilter
extends
OncePerRequestFilter
{
...
...
docs/15.md
浏览文件 @
b2d39606
...
@@ -193,6 +193,6 @@ Yummy! you eat some raspberry
...
@@ -193,6 +193,6 @@ Yummy! you eat some raspberry
我们无法执行石头对象的 eat 方法,因为它不是
`Eatable`
类型。
我们无法执行石头对象的 eat 方法,因为它不是
`Eatable`
类型。
##
免责声明
##
结论
可以使用
[
抽象类
](
https://javatutorial.net/java-abstraction-example
)
,
[
集合
](
https://javatutorial.net/java-collection-tutorial
)
和
[
继承
](
https://javatutorial.net/java-inheritance-example
)
以更时髦的方式编写上面的代码示例。 其中一些是更高级的主题,将在下一个教程中进行说明。 这是一个初学者教程,旨在仅说明 Java 接口。
可以使用
[
抽象类
](
https://javatutorial.net/java-abstraction-example
)
,
[
集合
](
https://javatutorial.net/java-collection-tutorial
)
和
[
继承
](
https://javatutorial.net/java-inheritance-example
)
以更时髦的方式编写上面的代码示例。 其中一些是更高级的主题,将在下一个教程中进行说明。 这是一个初学者教程,旨在仅说明 Java 接口。
\ No newline at end of file
docs/156.md
浏览文件 @
b2d39606
...
@@ -51,7 +51,7 @@ public class Example {
...
@@ -51,7 +51,7 @@ public class Example {
4.
抛出建议后:仅在连接点方法抛出异常时才运行这些建议(与“返回建议之后”相反)。 要将建议类型标记为“抛后”,我们可以使用@AfterThrowing 批注。
4.
抛出建议后:仅在连接点方法抛出异常时才运行这些建议(与“返回建议之后”相反)。 要将建议类型标记为“抛后”,我们可以使用@AfterThrowing 批注。
5.
围绕建议:这些建议为我们提供了灵活性,因为借助它们的使用,我们可以选择是否执行连接点方法。
5.
围绕建议:这些建议为我们提供了灵活性,因为借助它们的使用,我们可以选择是否执行连接点方法。
让我们看看如何实
施
这些不同的建议类型。
让我们看看如何实
现
这些不同的建议类型。
**咨询之前**
**咨询之前**
...
@@ -85,7 +85,7 @@ public class AfterAdviceDemo{
...
@@ -85,7 +85,7 @@ public class AfterAdviceDemo{
}
}
```
```
与“建议之前”实
施
非常相似,只有我们将“之前”替换为“之后”。
与“建议之前”实
现
非常相似,只有我们将“之前”替换为“之后”。
**返回建议后**
**返回建议后**
...
...
docs/176.md
浏览文件 @
b2d39606
...
@@ -227,7 +227,7 @@ public class DataBaseHelper extends SQLiteOpenHelper {
...
@@ -227,7 +227,7 @@ public class DataBaseHelper extends SQLiteOpenHelper {
## 步骤 3:创建登录数据库类
## 步骤 3:创建登录数据库类
登录数据库是一类,您在其中实现所有数据库编码。 首先使用四个字段创建用于登录的表,然后实
施
所有其他方法。
登录数据库是一类,您在其中实现所有数据库编码。 首先使用四个字段创建用于登录的表,然后实
现
所有其他方法。
```
java
```
java
package
com.example.admin.androiddatabaseexample
;
package
com.example.admin.androiddatabaseexample
;
...
...
docs/59.md
浏览文件 @
b2d39606
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
> 原文: [https://javatutorial.net/java-hashset-example](https://javatutorial.net/java-hashset-example)
> 原文: [https://javatutorial.net/java-hashset-example](https://javatutorial.net/java-hashset-example)
使用哈希表进行存储的集合通常由 Java HashSet 类创建。 顾名思义,HashSet 实现 Set 接口,并且还使用一个哈希表,该哈希表是 HashMap 实例。 HashSet 中元素的顺序是随机的。 此类允许使用 null 元素。 就复杂
性
而言,HashSet 为基本操作(如添加,删除,包含和大小)提供恒定的时间性能,前提是假定元素已被函数正确分散。
使用哈希表进行存储的集合通常由 Java HashSet 类创建。 顾名思义,HashSet 实现 Set 接口,并且还使用一个哈希表,该哈希表是 HashMap 实例。 HashSet 中元素的顺序是随机的。 此类允许使用 null 元素。 就复杂
度
而言,HashSet 为基本操作(如添加,删除,包含和大小)提供恒定的时间性能,前提是假定元素已被函数正确分散。
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
*
HashSet 允许为空值。
*
HashSet 允许为空值。
*
HashSet 类不同步。
*
HashSet 类不同步。
*
HashSet 的顺序不由插入顺序维护。 元素(在此类中)是根据其哈希码插入的。
*
HashSet 的顺序不由插入顺序维护。 元素(在此类中)是根据其哈希码插入的。
*
就搜索操作而言,由于 HashSet 具有恒定的时间复杂
性
,因此它是最好的方法。
*
就搜索操作而言,由于 HashSet 具有恒定的时间复杂
度
,因此它是最好的方法。
*
HashSet 的初始默认容量为 16,而负载系数为 0.75。
*
HashSet 的初始默认容量为 16,而负载系数为 0.75。
## `HashSet`简单的结构图
## `HashSet`简单的结构图
...
...
docs/60.md
浏览文件 @
b2d39606
# Java
TreeSet
示例
# Java
`TreeSet`
示例
> 原文: [https://javatutorial.net/java-treeset-example](https://javatutorial.net/java-treeset-example)
> 原文: [https://javatutorial.net/java-treeset-example](https://javatutorial.net/java-treeset-example)
Java TreeSet 类是一个基于
[
TreeMap
](
https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
)
的
[
NavigableSet
](
https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html
)
实现。 元素可以通过
[
比较器
](
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
)
进行排序,也可以仅通过其自然排序进行排序。 在复杂
性
方面,此实现为所有基本操作(例如添加,删除,包含)提供了 log(n)时间成本。
Java TreeSet 类是一个基于
[
TreeMap
](
https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
)
的
[
NavigableSet
](
https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html
)
实现。 元素可以通过
[
比较器
](
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
)
进行排序,也可以仅通过其自然排序进行排序。 在复杂
度
方面,此实现为所有基本操作(例如添加,删除,包含)提供了 log(n)时间成本。
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
## 关于 Java 中的
TreeSet
的重要知识
## 关于 Java 中的
`TreeSet`
的重要知识
*
TreeSet 实现 SortedSet 接口,这意味着不允许重复值。
*
TreeSet 实现 SortedSet 接口,这意味着不允许重复值。
*
异构对象不能插入 TreeSet 中,因为它不允许这样做。 它将在运行时引发 classCastException。
*
异构对象不能插入 TreeSet 中,因为它不允许这样做。 它将在运行时引发 classCastException。
*
TreeSet 类不保留元素的插入顺序,但是元素按其键排序。
*
TreeSet 类不保留元素的插入顺序,但是元素按其键排序。
*
TreeSet 中的元素以升序和排序顺序存储。
*
TreeSet 中的元素以升序和排序顺序存储。
## Java 中
TreeSet
的局限性
## Java 中
`TreeSet`
的局限性
*
值必须是可比较的,或者需要在构造函数中提供比较器
*
值必须是可比较的,或者需要在构造函数中提供比较器
##
TreeSet
的简单说明
##
`TreeSet`
的简单说明
![
This diagram shows the inheritance diagram
](
img/80a537da566b5a3522a88128f3a7fdc2.jpg
)
![
This diagram shows the inheritance diagram
](
img/80a537da566b5a3522a88128f3a7fdc2.jpg
)
继承图
继承图
##
TreeSet
中的构造方法
##
`TreeSet`
中的构造方法
1.
TreeSet():构造一个新的空树集,并根据其元素的自然顺序进行排序
1.
TreeSet():构造一个新的空树集,并根据其元素的自然顺序进行排序
2.
TreeSet(Collection
<
?扩展 E
>
c):构造一个新树集,该树集包含指定集合中的元素,并根据其元素的自然顺序对其进行排序。
2.
TreeSet(Collection
<
?扩展 E
>
c):构造一个新树集,该树集包含指定集合中的元素,并根据其元素的自然顺序对其进行排序。
3.
TreeSet(Comparator
<
?super E
>
比较器):构造一个空树集,该树集根据指定的比较器排序。
3.
TreeSet(Comparator
<
?super E
>
比较器):构造一个空树集,该树集根据指定的比较器排序。
4.
TreeSet(SortedSet
<
E
>
s):构造一个与指定集合完全相同的新树集,包括元素的顺序。
4.
TreeSet(SortedSet
<
E
>
s):构造一个与指定集合完全相同的新树集,包括元素的顺序。
##
TreeSet
中的方法
##
`TreeSet`
中的方法
1.
void add(Object o):根据 TreeSet 中的某些排序顺序添加指定的元素。 不会添加重复项。
1.
void add(Object o):根据 TreeSet 中的某些排序顺序添加指定的元素。 不会添加重复项。
2.
void clear():从树集中删除所有元素。
2.
void clear():从树集中删除所有元素。
...
@@ -45,7 +45,7 @@ Java TreeSet 类是一个基于 [TreeMap](https://docs.oracle.com/javase/8/docs/
...
@@ -45,7 +45,7 @@ Java TreeSet 类是一个基于 [TreeMap](https://docs.oracle.com/javase/8/docs/
有关所有方法的文档,请访问
[
Oracle 官方文档页面
](
https://docs.oracle.com/javase/8/docs/api/?java/util/TreeSet.html
)
。
有关所有方法的文档,请访问
[
Oracle 官方文档页面
](
https://docs.oracle.com/javase/8/docs/api/?java/util/TreeSet.html
)
。
### 使用
add()在 TreeSet
中添加元素
### 使用
`add()`在`TreeSet`
中添加元素
语法:treeSet.add(对象 o)
语法:treeSet.add(对象 o)
...
@@ -73,7 +73,7 @@ public class TreeSetExample {
...
@@ -73,7 +73,7 @@ public class TreeSetExample {
TreeSet:
[
Elephant
,
Tiger
,
Lion
]
TreeSet:
[
Elephant
,
Tiger
,
Lion
]
```
```
### 使用
first()和 last()获取 TreeSet
的第一个和最后一个元素
### 使用
`first()`和`last()`获取`TreeSet`
的第一个和最后一个元素
句法:
句法:
...
@@ -109,7 +109,7 @@ The first element: Elephant
...
@@ -109,7 +109,7 @@ The first element: Elephant
The
last
element:
Lion
The
last
element:
Lion
```
```
### 使用
contains()
检查元素是否在树集中
### 使用
`contains()`
检查元素是否在树集中
语法:treeSet.contains(对象元素)
语法:treeSet.contains(对象元素)
...
@@ -141,7 +141,7 @@ Is 'Cat' in the tree set? false
...
@@ -141,7 +141,7 @@ Is 'Cat' in the tree set? false
Is
'
Lion
'
in
the
tree
set
?
true
Is
'
Lion
'
in
the
tree
set
?
true
```
```
### 使用
remove()
从树集中删除一个元素
### 使用
`remove()`
从树集中删除一个元素
语法:treeSet.remove(Object o)
语法:treeSet.remove(Object o)
...
@@ -173,7 +173,7 @@ TreeSet: [Elephant, Tiger, Lion]
...
@@ -173,7 +173,7 @@ TreeSet: [Elephant, Tiger, Lion]
TreeSet:
[
Tiger
]
TreeSet:
[
Tiger
]
```
```
### 使用
size()
获取树集中的元素数量
### 使用
`size()`
获取树集中的元素数量
语法:treeSet.size()
语法:treeSet.size()
...
@@ -204,7 +204,7 @@ TreeSet: [Elephant, Tiger, Lion]
...
@@ -204,7 +204,7 @@ TreeSet: [Elephant, Tiger, Lion]
The
size
of
the
tree
set
is:
3
The
size
of
the
tree
set
is:
3
```
```
### 使用
isEmpty()
检查树集是否为空
### 使用
`isEmpty()`
检查树集是否为空
语法:treeSet.isEmpty()
语法:treeSet.isEmpty()
...
@@ -240,7 +240,7 @@ Empty: false
...
@@ -240,7 +240,7 @@ Empty: false
Empty:
true
Empty:
true
```
```
## 使用
Iterator()
遍历树集
## 使用
`Iterator()`
遍历树集
句法:
句法:
...
@@ -283,7 +283,7 @@ Tiger
...
@@ -283,7 +283,7 @@ Tiger
Lion
Lion
```
```
## 使用增强的
for
循环遍历树集
## 使用增强的
`for`
循环遍历树集
句法:
句法:
...
...
docs/61.md
浏览文件 @
b2d39606
# Java
LinkedHashSet
示例
# Java
`LinkedHashSet`
示例
> 原文: [https://javatutorial.net/java-linkedhashset-example](https://javatutorial.net/java-linkedhashset-example)
> 原文: [https://javatutorial.net/java-linkedhashset-example](https://javatutorial.net/java-linkedhashset-example)
...
@@ -6,7 +6,7 @@ Java 中的 LinkedHashSet 类与 [HashSet](https://javatutorial.net/java-hashset
...
@@ -6,7 +6,7 @@ Java 中的 LinkedHashSet 类与 [HashSet](https://javatutorial.net/java-hashset
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
##
LinkedHashSet
的优点
##
`LinkedHashSet`
的优点
*
LinkedHashSet 维护元素的插入顺序
*
LinkedHashSet 维护元素的插入顺序
*
插入,删除和检索操作的时间复杂度为 O(1)(恒定时间)。
*
插入,删除和检索操作的时间复杂度为 O(1)(恒定时间)。
...
@@ -19,14 +19,14 @@ Java 中的 LinkedHashSet 类与 [HashSet](https://javatutorial.net/java-hashset
...
@@ -19,14 +19,14 @@ Java 中的 LinkedHashSet 类与 [HashSet](https://javatutorial.net/java-hashset
LinkedHashSet 的继承图
LinkedHashSet 的继承图
##
LinkedHashSet
中的构造方法
##
`LinkedHashSet`
中的构造方法
1.
LinkedHashSet():初始化一个新的链接哈希集,默认初始容量为 16,负载因子为 0.75。
1.
LinkedHashSet():初始化一个新的链接哈希集,默认初始容量为 16,负载因子为 0.75。
2.
LinkedHashSet(Collection
<
?Extended E
>
c):使用与指定集合相同的元素初始化一个新的链接哈希集。
2.
LinkedHashSet(Collection
<
?Extended E
>
c):使用与指定集合相同的元素初始化一个新的链接哈希集。
3.
LinkedHashSet(int initialCapacity):使用指定的初始容量初始化一个新的链接哈希集。
3.
LinkedHashSet(int initialCapacity):使用指定的初始容量初始化一个新的链接哈希集。
4.
LinkedHashSet(int initialCapacity,float loadFactor):使用指定的容量和负载因子初始化一个新的链接哈希集。
4.
LinkedHashSet(int initialCapacity,float loadFactor):使用指定的容量和负载因子初始化一个新的链接哈希集。
##
LinkedHashSet
中的方法
##
`LinkedHashSet`
中的方法
1.
从类 java.util.HashSet 继承的方法:
[
添加
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add(E
)
),
[
清除
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clear(
)
),
[
克隆
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clone(
)
),
[
包含
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#contains(java.lang.Object
)
),
[
isEmpty
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#isEmpty(
)
) ,
[
迭代器
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#iterator(
)
),
[
删除
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#remove(java.lang.Object
)
),
[
大小
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#size(
)
)
1.
从类 java.util.HashSet 继承的方法:
[
添加
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add(E
)
),
[
清除
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clear(
)
),
[
克隆
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clone(
)
),
[
包含
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#contains(java.lang.Object
)
),
[
isEmpty
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#isEmpty(
)
) ,
[
迭代器
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#iterator(
)
),
[
删除
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#remove(java.lang.Object
)
),
[
大小
](
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#size(
)
)
2.
从类 java.util.AbstractSet 继承的方法:
[
等于
](
https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object
)
),
[
hashCode
](
https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode(
)
) ,
[
removeAll
](
https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection
)
)
2.
从类 java.util.AbstractSet 继承的方法:
[
等于
](
https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object
)
),
[
hashCode
](
https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode(
)
) ,
[
removeAll
](
https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection
)
)
...
@@ -36,7 +36,7 @@ LinkedHashSet 的继承图
...
@@ -36,7 +36,7 @@ LinkedHashSet 的继承图
有关所有方法的文档,请访问
[
Oracle 官方文档页面
](
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
)
。
有关所有方法的文档,请访问
[
Oracle 官方文档页面
](
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
)
。
## 使用
Iterator()在 LinkedHashSet 中进行迭代
## 使用
`Iterator()`迭代`LinkedHashSet`
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
@@ -63,7 +63,7 @@ Tiger
...
@@ -63,7 +63,7 @@ Tiger
Lion
Lion
```
```
##
**使用 For 循环**遍历 LinkedHashSet
##
使用`For`循环遍历`LinkedHashSet`
```
java
```
java
LinkedHashSet
<
String
>
linkedHashSet
=
new
LinkedHashSet
<
String
>();
LinkedHashSet
<
String
>
linkedHashSet
=
new
LinkedHashSet
<
String
>();
...
@@ -72,7 +72,7 @@ for (int i = 0; i < linkedHashSet.size(); i++) {
...
@@ -72,7 +72,7 @@ for (int i = 0; i < linkedHashSet.size(); i++) {
}
}
```
```
## 使用
Enchanced For 循环遍历 LinkedHashSet
## 使用
增强`For`循环遍历`LinkedHashSet`
```
java
```
java
for
(
String
temp
:
linkedHashSet
)
{
for
(
String
temp
:
linkedHashSet
)
{
...
@@ -80,7 +80,7 @@ for (String temp : linkedHashSet) {
...
@@ -80,7 +80,7 @@ for (String temp : linkedHashSet) {
}
}
```
```
## 使用
While 循环遍历 LinkedHashSet
## 使用
`While`循环遍历`LinkedHashSet`
```
java
```
java
int
i
=
0
;
int
i
=
0
;
...
@@ -90,7 +90,7 @@ while (i < linkedHashSet.size()) {
...
@@ -90,7 +90,7 @@ while (i < linkedHashSet.size()) {
}
}
```
```
##
使用 LinkedHashSet
的示例程序
##
`LinkedHashSet`
的示例程序
```
java
```
java
import
java.util.LinkedHashSet
;
import
java.util.LinkedHashSet
;
...
...
docs/63.md
浏览文件 @
b2d39606
# Java
ConcurrentHashSet
示例
# Java
`ConcurrentHashSet`
示例
> 原文: [https://javatutorial.net/java-concurrenthashset-example](https://javatutorial.net/java-concurrenthashset-example)
> 原文: [https://javatutorial.net/java-concurrenthashset-example](https://javatutorial.net/java-concurrenthashset-example)
...
@@ -12,7 +12,7 @@ Java 并发 API 中包含许多 Collection 类,例如 ArrayList 的 CopyOnArra
...
@@ -12,7 +12,7 @@ Java 并发 API 中包含许多 Collection 类,例如 ArrayList 的 CopyOnArra
还有其他尝试创建 ConcurrentHashSet 的即兴创作,但现在它们都已过去,因为 Java 8 添加了 newKeySet(),它返回由 ConcurrentHashMap 支持的 Set。
还有其他尝试创建 ConcurrentHashSet 的即兴创作,但现在它们都已过去,因为 Java 8 添加了 newKeySet(),它返回由 ConcurrentHashMap 支持的 Set。
### 如何在 Java 8 中创建
ConcurrentHashSet
### 如何在 Java 8 中创建
`ConcurrentHashSet`
```
java
```
java
ConcurrentHashMap
<
String
,
Integer
>
example
=
new
ConcurrentHashMap
<>();
ConcurrentHashMap
<
String
,
Integer
>
example
=
new
ConcurrentHashMap
<>();
...
@@ -28,7 +28,7 @@ exampleSet.remove("example");
...
@@ -28,7 +28,7 @@ exampleSet.remove("example");
**注意:**
这是在 Java 中创建线程安全 Set 的唯一方法。
**注意:**
这是在 Java 中创建线程安全 Set 的唯一方法。
###
**Java 程序使用 java.util.concurrent.ConcurrentHashMap 类上添加的新方法创建 ConcurrentHashSet。**
###
Java 程序使用`java.util.concurrent.ConcurrentHashMap`类上添加的新方法创建 ConcurrentHashSet。
```
java
```
java
import
java.util.Set
;
import
java.util.Set
;
...
...
docs/64.md
浏览文件 @
b2d39606
# Java
HashMap
示例
# Java
`HashMap`
示例
> 原文: [https://javatutorial.net/java-hashmap-example](https://javatutorial.net/java-hashmap-example)
> 原文: [https://javatutorial.net/java-hashmap-example](https://javatutorial.net/java-hashmap-example)
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
## 为什么
HashMap
重要和有用
## 为什么
`HashMap`
重要和有用
*
由于其键/值对,因此易于组织数据。
*
由于其键/值对,因此易于组织数据。
*
HashMap 允许 1 个 null 键和多个 null 值。
*
HashMap 允许 1 个 null 键和多个 null 值。
...
@@ -17,14 +17,14 @@
...
@@ -17,14 +17,14 @@
![
Inheritance diagram of HashMap
](
img/fff6489e999a8221d5c68f8d836ad5a7.jpg
)
![
Inheritance diagram of HashMap
](
img/fff6489e999a8221d5c68f8d836ad5a7.jpg
)
##
HashMap
中的构造方法摘要
##
`HashMap`
中的构造方法摘要
1.
HashMap():使用默认的初始容量 16 和默认的加载因子 0.75 初始化一个空的 HashMap。
1.
HashMap():使用默认的初始容量 16 和默认的加载因子 0.75 初始化一个空的 HashMap。
2.
HashMap(int initialCapacity):使用指定的初始容量和默认加载因子 0.75 初始化一个空的 HashMap。
2.
HashMap(int initialCapacity):使用指定的初始容量和默认加载因子 0.75 初始化一个空的 HashMap。
3.
HashMap(int initialCapacity,float loadFactor):使用指定的初始容量和负载因子初始化一个空的 HashMap。
3.
HashMap(int initialCapacity,float loadFactor):使用指定的初始容量和负载因子初始化一个空的 HashMap。
4.
HashMap(Map
<
?扩展 K,?扩展 V
>
m):使用与指定 Map 相同的映射初始化一个新的 HashMap。
4.
HashMap(Map
<
?扩展 K,?扩展 V
>
m):使用与指定 Map 相同的映射初始化一个新的 HashMap。
##
HashMap
类中的方法
##
`HashMap`
类中的方法
1.
void clear():从此映射中删除所有映射。
1.
void clear():从此映射中删除所有映射。
2.
Object clone():克隆另一个 HashMap,但是不会克隆键和值本身。
2.
Object clone():克隆另一个 HashMap,但是不会克隆键和值本身。
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
9.
V replace(K 键,V 值):仅当当前映射到某个值时,才替换指定键的条目。
9.
V replace(K 键,V 值):仅当当前映射到某个值时,才替换指定键的条目。
10.
int size():返回此映射中的键/值对的数量。
10.
int size():返回此映射中的键/值对的数量。
###
**使用 HashMap 进行基本方法操作以及它们如何工作以及如何相互交互**
###
使用`HashMap`进行基本操作,以及它们如何工作以及如何相互交互
```
java
```
java
import
java.util.HashMap
;
import
java.util.HashMap
;
...
...
docs/65.md
浏览文件 @
b2d39606
# Java
LinkedHashMap
示例
# Java
`LinkedHashMap`
示例
> 原文: [https://javatutorial.net/java-linkedhashmap-example](https://javatutorial.net/java-linkedhashmap-example)
> 原文: [https://javatutorial.net/java-linkedhashmap-example](https://javatutorial.net/java-linkedhashmap-example)
...
@@ -19,7 +19,7 @@ LinkedHashMap 是哈希表和链接列表的组合,以可预测的迭代顺序
...
@@ -19,7 +19,7 @@ LinkedHashMap 是哈希表和链接列表的组合,以可预测的迭代顺序
继承图
继承图
##
LinkedHashMap
中的构造方法摘要
##
`LinkedHashMap`
中的构造方法摘要
1.
LinkedHashMap():构造一个空的插入顺序的 LinkedHashMap,其默认初始容量(16)和默认负载因子(0.75)。
1.
LinkedHashMap():构造一个空的插入顺序的 LinkedHashMap,其默认初始容量(16)和默认负载因子(0.75)。
2.
LinkedHashMap(int initialCapacity):构造一个空的插入顺序的 LinkedHashMap,并将容量设置为指定的 initialCapacity 参数和默认负载因子(0.75)。
2.
LinkedHashMap(int initialCapacity):构造一个空的插入顺序的 LinkedHashMap,并将容量设置为指定的 initialCapacity 参数和默认负载因子(0.75)。
...
@@ -27,7 +27,7 @@ LinkedHashMap 是哈希表和链接列表的组合,以可预测的迭代顺序
...
@@ -27,7 +27,7 @@ LinkedHashMap 是哈希表和链接列表的组合,以可预测的迭代顺序
4.
LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder):使用指定的初始容量,负载系数和排序方式构造一个空的 LinkedHashMap 实例。
4.
LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder):使用指定的初始容量,负载系数和排序方式构造一个空的 LinkedHashMap 实例。
5.
LinkedHashMap(Map
<
?扩展 K,?扩展 V
>
m):构造一个插入顺序的 LinkedHashMap 实例,该实例具有与指定映射相同的映射。
5.
LinkedHashMap(Map
<
?扩展 K,?扩展 V
>
m):构造一个插入顺序的 LinkedHashMap 实例,该实例具有与指定映射相同的映射。
##
LinkedHashMap
类中的方法
##
`LinkedHashMap`
类中的方法
1.
void clear():从此映射中删除所有映射。
1.
void clear():从此映射中删除所有映射。
2.
boolean containsValue(Object value):如果 LinkedHashMap 包含指定的值,则返回 true,否则返回 false。
2.
boolean containsValue(Object value):如果 LinkedHashMap 包含指定的值,则返回 true,否则返回 false。
...
@@ -40,7 +40,7 @@ LinkedHashMap 是哈希表和链接列表的组合,以可预测的迭代顺序
...
@@ -40,7 +40,7 @@ LinkedHashMap 是哈希表和链接列表的组合,以可预测的迭代顺序
有关 EnumSet 主要方法的更多信息,请随时访问原始
[
Oracle 文档
](
https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html
)
。
有关 EnumSet 主要方法的更多信息,请随时访问原始
[
Oracle 文档
](
https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html
)
。
### 获取
LinkedHashMap 的大小,检查其在特定键中是否包含某个值,并检查其是否为空,最后从 LinkedHashMap
中删除键:
### 获取
`LinkedHashMap`的大小,检查其在特定键中是否包含某个值,并检查其是否为空,最后从`LinkedHashMap`
中删除键:
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
@@ -86,7 +86,7 @@ Does it contain 'marital status'? true
...
@@ -86,7 +86,7 @@ Does it contain 'marital status'? true
Deleting
element
'
name
'
:
"Joe"
Deleting
element
'
name
'
:
"Joe"
```
```
### 使用
clear()清除 LinkedHashMap
### 使用
`clear()`清除`LinkedHashMap`
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
...
docs/66.md
浏览文件 @
b2d39606
# Java
TreeMap
示例
# Java
`TreeMap`
示例
> 原文: [https://javatutorial.net/java-treemap-example](https://javatutorial.net/java-treemap-example)
> 原文: [https://javatutorial.net/java-treemap-example](https://javatutorial.net/java-treemap-example)
...
@@ -6,26 +6,26 @@ TreeMap 实现了 Map 接口,还实现了 NavigableMap 以及 Abstract 类。
...
@@ -6,26 +6,26 @@ TreeMap 实现了 Map 接口,还实现了 NavigableMap 以及 Abstract 类。
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
## 有关
TreeMap
的要点
## 有关
`TreeMap`
的要点
*
TreeMap 实现 Map 接口。
*
TreeMap 实现 Map 接口。
*
TreeMap 不允许使用空键。 而是,抛出 NullPointerException。 虽然,多个空值可以与不同的键关联。
*
TreeMap 不允许使用空键。 而是,抛出 NullPointerException。 虽然,多个空值可以与不同的键关联。
*
TreeMap 是
[
Java Collections Framework
](
https://docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html
)
的成员。
*
TreeMap 是
[
Java Collections Framework
](
https://docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html
)
的成员。
##
TreeMap
的继承图
##
`TreeMap`
的继承图
![
TreeMap inheritance diagram
](
img/d259c9e6fc8d33362024fc7adca465de.jpg
)
![
TreeMap inheritance diagram
](
img/d259c9e6fc8d33362024fc7adca465de.jpg
)
TreeMap 继承图
TreeMap 继承图
##
TreeMap
中的构造方法摘要
##
`TreeMap`
中的构造方法摘要
1.
TreeMap():使用其键的自然顺序构造一个新的空树图。
1.
TreeMap():使用其键的自然顺序构造一个新的空树图。
2.
TreeMap(Comparator
<
?super K
>
比较器):构造一个新的空树图,根据给定的比较器排序。
2.
TreeMap(Comparator
<
?super K
>
比较器):构造一个新的空树图,根据给定的比较器排序。
3.
TreeMap(Map
<
?扩展 K,?扩展 V
>
m):构造一个新的树图,该树图包含与给定图相同的映射,并根据其键的自然顺序进行排序。
3.
TreeMap(Map
<
?扩展 K,?扩展 V
>
m):构造一个新的树图,该树图包含与给定图相同的映射,并根据其键的自然顺序进行排序。
4.
TreeMap(SortedMap
<
K ,?扩展 V
>
m):构造一个新的树图,该树图包含与指定排序图相同的映射并使用相同的排序。
4.
TreeMap(SortedMap
<
K ,?扩展 V
>
m):构造一个新的树图,该树图包含与指定排序图相同的映射并使用相同的排序。
##
TreeMap
类中的方法
##
`TreeMap`
类中的方法
1.
void clear():删除树形图中的所有元素。
1.
void clear():删除树形图中的所有元素。
2.
Object clone():返回 TreeMap 实例的浅表副本。
2.
Object clone():返回 TreeMap 实例的浅表副本。
...
@@ -40,7 +40,7 @@ TreeMap 继承图
...
@@ -40,7 +40,7 @@ TreeMap 继承图
有关 EnumSet 主要方法的更多信息,请随时访问原始
[
Oracle 文档
](
https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
)
。
有关 EnumSet 主要方法的更多信息,请随时访问原始
[
Oracle 文档
](
https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
)
。
### 使用
containsKey()和 containsValue()检查当前树形图是否包含指定的键或值,并使用 put()填充 TreeMap
### 使用
`containsKey()`和`containsValue()`检查当前树形图是否包含指定的键或值,并使用`put()`填充`TreeMap`
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
@@ -88,7 +88,7 @@ Is the value 'tutorial' present? true
...
@@ -88,7 +88,7 @@ Is the value 'tutorial' present? true
```
```
### 使用
remove()从 TreeMap
中删除元素
### 使用
`remove()`从`TreeMap`
中删除元素
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
...
docs/67.md
浏览文件 @
b2d39606
# Java
EnumMap
示例
# Java
`EnumMap`
示例
> 原文: [https://javatutorial.net/java-enummap-example](https://javatutorial.net/java-enummap-example)
> 原文: [https://javatutorial.net/java-enummap-example](https://javatutorial.net/java-enummap-example)
...
@@ -11,19 +11,19 @@ EnumMap 类实现 [Map](https://docs.oracle.com/javase/7/docs/api/java/util/Map.
...
@@ -11,19 +11,19 @@ EnumMap 类实现 [Map](https://docs.oracle.com/javase/7/docs/api/java/util/Map.
*
EnumMap 不同步。
*
EnumMap 不同步。
*
EnumMap 比
[
HashMap
](
https://javatutorial.net/java-hashmap-example
)
快得多
*
EnumMap 比
[
HashMap
](
https://javatutorial.net/java-hashmap-example
)
快得多
##
EnumMap
图
##
`EnumMap`
图
![
EnumMap Inheritance diagram
](
img/e63bca435be3bbe175a8aa31a6645aad.jpg
)
![
EnumMap Inheritance diagram
](
img/e63bca435be3bbe175a8aa31a6645aad.jpg
)
EnumMap 继承图
EnumMap 继承图
##
EnumMap
中的构造方法
##
`EnumMap`
中的构造方法
1.
EnumMap(Class
<
K
>
keyType):使用指定的密钥类型创建一个空的枚举映射。
1.
EnumMap(Class
<
K
>
keyType):使用指定的密钥类型创建一个空的枚举映射。
2.
EnumMap(EnumMap
<
K,?扩展 V
>
m):创建一个与指定枚举图具有相同键类型的枚举图,最初包含相同的映射(如果有)。
2.
EnumMap(EnumMap
<
K,?扩展 V
>
m):创建一个与指定枚举图具有相同键类型的枚举图,最初包含相同的映射(如果有)。
3.
EnumMap(Map
<
K,?扩展 V
>
m):创建一个从指定映射初始化的枚举映射。
3.
EnumMap(Map
<
K,?扩展 V
>
m):创建一个从指定映射初始化的枚举映射。
##
EnumMap
中的方法
##
`EnumMap`
中的方法
1.
void clear():从此映射中删除所有映射。
1.
void clear():从此映射中删除所有映射。
2.
EnumMap
<
K,V
>
clone():返回一个 EnumMap,它表示另一个副本。
2.
EnumMap
<
K,V
>
clone():返回一个 EnumMap,它表示另一个副本。
...
...
docs/68.md
浏览文件 @
b2d39606
# Java
WeakHashMap
示例
# Java
`WeakHashMap`
示例
> 原文: [https://javatutorial.net/java-weakhashmap-example](https://javatutorial.net/java-weakhashmap-example)
> 原文: [https://javatutorial.net/java-weakhashmap-example](https://javatutorial.net/java-weakhashmap-example)
...
@@ -20,14 +20,14 @@ Java 中的 WeakHashMap 实现了 Map 接口,并表示一个具有弱键的哈
...
@@ -20,14 +20,14 @@ Java 中的 WeakHashMap 实现了 Map 接口,并表示一个具有弱键的哈
WeakHashMap 实现 Map 并扩展 AbstractMap。
WeakHashMap 实现 Map 并扩展 AbstractMap。
##
WeakHashMap
中的构造方法
##
`WeakHashMap`
中的构造方法
1.
WeakHashMap():创建一个空的 WeakHashMap,默认初始容量为 16,负载系数为 0.75。
1.
WeakHashMap():创建一个空的 WeakHashMap,默认初始容量为 16,负载系数为 0.75。
2.
WeakHashMap(int initialCapacity:创建具有指定容量的空 WeakHashMap。
2.
WeakHashMap(int initialCapacity:创建具有指定容量的空 WeakHashMap。
3.
WeakHashMap(int initialCapacity,float loadFactor):创建具有指定容量和负载因子的空 WeakHashMap。
3.
WeakHashMap(int initialCapacity,float loadFactor):创建具有指定容量和负载因子的空 WeakHashMap。
4.
WeakHashMap(Map
<
?扩展 K,?扩展 V
>
m):创建一个具有与指定映射相同的映射的新 WeakHashMap。
4.
WeakHashMap(Map
<
?扩展 K,?扩展 V
>
m):创建一个具有与指定映射相同的映射的新 WeakHashMap。
##
WeakHashMap
中的方法
##
`WeakHashMap`
中的方法
1.
void clear():从当前映射中删除所有映射。
1.
void clear():从当前映射中删除所有映射。
2.
boolean containsKey(Object key):如果当前映射包含指定键的映射,则返回 true。
2.
boolean containsKey(Object key):如果当前映射包含指定键的映射,则返回 true。
...
...
docs/69.md
浏览文件 @
b2d39606
# Java
IdentityHashMap
示例
# Java
`IdentityHashMap`
示例
> 原文: [https://javatutorial.net/java-identityhashmap-example](https://javatutorial.net/java-identityhashmap-example)
> 原文: [https://javatutorial.net/java-identityhashmap-example](https://javatutorial.net/java-identityhashmap-example)
...
@@ -16,13 +16,13 @@ IdentityHashMap 允许空值和空键以及所有可选的映射操作。 但是
...
@@ -16,13 +16,13 @@ IdentityHashMap 允许空值和空键以及所有可选的映射操作。 但是
IdentityHashMap:实现和扩展的内容。
IdentityHashMap:实现和扩展的内容。
##
IdentityHashMap
中的构造方法
##
`IdentityHashMap`
中的构造方法
1.
IdentityHashMap():创建一个新的身份哈希映射,默认最大大小为 21。
1.
IdentityHashMap():创建一个新的身份哈希映射,默认最大大小为 21。
2.
IndetityHashMap(int ExpectedMaxSize):创建一个具有预期最大大小的新空地图。
2.
IndetityHashMap(int ExpectedMaxSize):创建一个具有预期最大大小的新空地图。
3.
IdentityHashMap(Map
<
?扩展 K,?扩展 V
>
m):创建一个新的 Identity,其映射包含与指定映射相同的映射。
3.
IdentityHashMap(Map
<
?扩展 K,?扩展 V
>
m):创建一个新的 Identity,其映射包含与指定映射相同的映射。
##
IdentityHashMap
中的方法
##
`IdentityHashMap`
中的方法
1.
void clear():从此映射中删除所有映射。
1.
void clear():从此映射中删除所有映射。
2.
Object clone():返回此标识哈希图的副本(重要的是要注意,键和值本身未克隆)。
2.
Object clone():返回此标识哈希图的副本(重要的是要注意,键和值本身未克隆)。
...
...
docs/70.md
浏览文件 @
b2d39606
# Java
SortedMap
示例
# Java
`SortedMap`
示例
> 原文: [https://javatutorial.net/java-sortedmap-example](https://javatutorial.net/java-sortedmap-example)
> 原文: [https://javatutorial.net/java-sortedmap-example](https://javatutorial.net/java-sortedmap-example)
...
...
docs/71.md
浏览文件 @
b2d39606
# Java
ConcurrentMap
示例
# Java
`ConcurrentMap`
示例
> 原文: [https://javatutorial.net/java-concurrentmap-example](https://javatutorial.net/java-concurrentmap-example)
> 原文: [https://javatutorial.net/java-concurrentmap-example](https://javatutorial.net/java-concurrentmap-example)
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
ConcurrentMap 由表示为表存储桶的节点数组组成,它们在第一次插入后初始化。
ConcurrentMap 由表示为表存储桶的节点数组组成,它们在第一次插入后初始化。
##
ConcurrentMap 和 [HashMap](https://javatutorial.net/java-hashmap-example)
之间的效率比较
##
`ConcurrentMap`和[`HashMap`](https://javatutorial.net/java-hashmap-example)
之间的效率比较
*
如果要尽快处理数据,则必须使用所有线程,因此这意味着 ConcurrentMap 在这里更有效。
*
如果要尽快处理数据,则必须使用所有线程,因此这意味着 ConcurrentMap 在这里更有效。
*
如果只需要单线程访问,则 HashMap 更快。
*
如果只需要单线程访问,则 HashMap 更快。
...
@@ -30,7 +30,7 @@ ConcurrentMap 由表示为表存储桶的节点数组组成,它们在第一次
...
@@ -30,7 +30,7 @@ ConcurrentMap 由表示为表存储桶的节点数组组成,它们在第一次
ConcurrentMap
ConcurrentMap
##
ConcurrentMap
中的方法
##
`ConcurrentMap`
中的方法
1.
默认 V 计算(K 键,BiFunction
<
?超级 K,?超级 V,?扩展 V
>
remappingFunction):尝试计算指定键及其当前映射值的映射。
1.
默认 V 计算(K 键,BiFunction
<
?超级 K,?超级 V,?扩展 V
>
remappingFunction):尝试计算指定键及其当前映射值的映射。
2.
默认的 V computeIfAbsent(K 键,函数
<
?超级 K,?扩展 V
>
mappingFunction):如果作为参数给出的键与值不相关(或为 null),则尝试计算其值并输入 进入此地图,除非为 null。
2.
默认的 V computeIfAbsent(K 键,函数
<
?超级 K,?扩展 V
>
mappingFunction):如果作为参数给出的键与值不相关(或为 null),则尝试计算其值并输入 进入此地图,除非为 null。
...
...
docs/72.md
浏览文件 @
b2d39606
# Java
哈希表
示例
# Java
`Hashtable`
示例
> 原文: [https://javatutorial.net/java-hashtable-example](https://javatutorial.net/java-hashtable-example)
> 原文: [https://javatutorial.net/java-hashtable-example](https://javatutorial.net/java-hashtable-example)
...
@@ -20,14 +20,14 @@ Hashtable 实现一个哈希表(顾名思义),并将键映射到值(例
...
@@ -20,14 +20,14 @@ Hashtable 实现一个哈希表(顾名思义),并将键映射到值(例
*
允许任意插入和删除键值对。
*
允许任意插入和删除键值对。
*
在许多情况下搜索树或任何其他表时效率更高。
*
在许多情况下搜索树或任何其他表时效率更高。
##
哈希表
中的构造方法摘要
##
`Hashtable`
中的构造方法摘要
1.
Hashtable():构造一个具有默认初始容量(11)(与 HashMap 或 LinkedHashMap 不同)和负载因子(0.75)的新哈希表。
1.
Hashtable():构造一个具有默认初始容量(11)(与 HashMap 或 LinkedHashMap 不同)和负载因子(0.75)的新哈希表。
2.
Hashtable(int initialCapacity):构造一个具有指定容量和默认负载因子(0.75)的新哈希表。
2.
Hashtable(int initialCapacity):构造一个具有指定容量和默认负载因子(0.75)的新哈希表。
3.
Hashtable(int initialCapacity,float loadFactor):构造一个具有指定容量和指定负载因子的新哈希表。
3.
Hashtable(int initialCapacity,float loadFactor):构造一个具有指定容量和指定负载因子的新哈希表。
4.
哈希表(Map
<
?扩展 K,?扩展 V
>
t):使用与给定 Map 相同的映射构造一个新的哈希表。
4.
哈希表(Map
<
?扩展 K,?扩展 V
>
t):使用与给定 Map 相同的映射构造一个新的哈希表。
##
哈希表
类中的方法
##
`Hashtable`
类中的方法
1.
void clear:清除当前哈希表,该哈希表删除/删除所有键/值对。
1.
void clear:清除当前哈希表,该哈希表删除/删除所有键/值对。
2.
对象 clone():创建此哈希表的浅表副本。
2.
对象 clone():创建此哈希表的浅表副本。
...
@@ -45,7 +45,7 @@ Hashtable 实现一个哈希表(顾名思义),并将键映射到值(例
...
@@ -45,7 +45,7 @@ Hashtable 实现一个哈希表(顾名思义),并将键映射到值(例
有关 Hashtable 类的主要方法的更多信息,请随时访问原始
[
Oracle 文档
](
https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html
)
。
有关 Hashtable 类的主要方法的更多信息,请随时访问原始
[
Oracle 文档
](
https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html
)
。
### 从
哈希表中删除所有键并克隆哈希表
### 从
`Hashtable`中删除所有键并克隆`Hashtable`
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
...
docs/73.md
浏览文件 @
b2d39606
# Java 中
ArrayList 和 LinkedList
之间的区别
# Java 中
`ArrayList`和`LinkedList`
之间的区别
> 原文: [https://javatutorial.net/difference-between-arraylist-and-linkedlist-in-java](https://javatutorial.net/difference-between-arraylist-and-linkedlist-in-java)
> 原文: [https://javatutorial.net/difference-between-arraylist-and-linkedlist-in-java](https://javatutorial.net/difference-between-arraylist-and-linkedlist-in-java)
...
@@ -6,15 +6,15 @@
...
@@ -6,15 +6,15 @@
由于继承了相同的接口– List,因此 ArrayList 和 Linked list 共享相同的属性。 但是 ArrayList 和 LinkedList 有什么区别? 简单地说– ArrayLists 对于一次写入多次读取操作很有用,但不利于从前端或中间进行添加/删除。 另一方面,LinkedList 更适合插入和删除数据。
由于继承了相同的接口– List,因此 ArrayList 和 Linked list 共享相同的属性。 但是 ArrayList 和 LinkedList 有什么区别? 简单地说– ArrayLists 对于一次写入多次读取操作很有用,但不利于从前端或中间进行添加/删除。 另一方面,LinkedList 更适合插入和删除数据。
##
营运
表现
##
性能
表现
下表通过对 LinkedLists 和 ArrayLists 执行不同的操作来显示平均算法复杂度
下表通过对 LinkedLists 和 ArrayLists 执行不同的操作来显示平均算法复杂度
![
ArrayList vs. LinkedList operations complexity
](
img/2f6d37b5d3752640aaf862d0aa8f3702.jpg
)
![
ArrayList vs. LinkedList operations complexity
](
img/2f6d37b5d3752640aaf862d0aa8f3702.jpg
)
ArrayList 与 LinkedList 操作的复杂
性
ArrayList 与 LinkedList 操作的复杂
度
## [
ArrayList](https://javatutorial.net/java-arraylist-example) 与 [LinkedList](https://javatutorial.net/java-linkedlist-example)
性能示例
## [
`ArrayList`](https://javatutorial.net/java-arraylist-example)与[`LinkedList`](https://javatutorial.net/java-linkedlist-example)
性能示例
下面的示例演示使用 ArrayList 和 LinkedList 上的相同数据进行
`add`
,
`set`
和
`remove`
操作的性能
下面的示例演示使用 ArrayList 和 LinkedList 上的相同数据进行
`add`
,
`set`
和
`remove`
操作的性能
...
@@ -123,6 +123,6 @@ LinkedList size after removal 0
...
@@ -123,6 +123,6 @@ LinkedList size after removal 0
*
ArrayList 在访问和修改元素方面明显更快
*
ArrayList 在访问和修改元素方面明显更快
*
ArrayList 从列表开头删除元素的速度明显较慢
*
ArrayList 从列表开头删除元素的速度明显较慢
##
免责声明
##
结论
在所有情况下,算法复杂度和运算性能都不是恒定的。 您必须考虑两个主要因素-列表的大小以及我们使用的元素在列表中的放置位置(在开头,中间或结尾)。 唯一不变的规则是:如果要更快地检索元素,请使用 ArrayList,如果要更快地处理数据,请使用 LinkedList。
在所有情况下,算法复杂度和运算性能都不是恒定的。 您必须考虑两个主要因素-列表的大小以及我们使用的元素在列表中的放置位置(在开头,中间或结尾)。 唯一不变的规则是:如果要更快地检索元素,请使用 ArrayList,如果要更快地处理数据,请使用 LinkedList。
\ No newline at end of file
docs/74.md
浏览文件 @
b2d39606
# Java
通过 HashMap 示例进行迭代
# Java
`HashMap`迭代示例
> 原文: [https://javatutorial.net/java-iterate-hashmap-example](https://javatutorial.net/java-iterate-hashmap-example)
> 原文: [https://javatutorial.net/java-iterate-hashmap-example](https://javatutorial.net/java-iterate-hashmap-example)
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
在 Java 中遍历集合或数据集是一项非常常见的任务。 您可以使用它来打印或处理数据。 以下示例显示了有关如何遍历 HashMap 的三种不同方法。 根据您的 Java 版本,您可以选择其中之一。
在 Java 中遍历集合或数据集是一项非常常见的任务。 您可以使用它来打印或处理数据。 以下示例显示了有关如何遍历 HashMap 的三种不同方法。 根据您的 Java 版本,您可以选择其中之一。
##
分别用于遍历 [HashMap
](https://javatutorial.net/java-hashmap-example)
##
使用`for`遍历[`HashMap`
](https://javatutorial.net/java-hashmap-example)
这是建议的方法。 它使您可以完全控制地图中的键和值。 使用这种方法,您实际上遍历了映射的
`EntrySet`
,并获得了循环内每个条目的键和值。
这是建议的方法。 它使您可以完全控制地图中的键和值。 使用这种方法,您实际上遍历了映射的
`EntrySet`
,并获得了循环内每个条目的键和值。
...
@@ -52,7 +52,7 @@ public class IterateHashMap {
...
@@ -52,7 +52,7 @@ public class IterateHashMap {
```
```
## 使用
Iterator 遍历 HashMap
## 使用
`Iterator`遍历`HashMap`
此方法使用
`java.util.Iterator`
浏览 HashMap。 这是 Java 1.4 和更早版本中的默认方法。 尽管下面的示例使用泛型,所以您需要 Java 1.5 +才能执行它
此方法使用
`java.util.Iterator`
浏览 HashMap。 这是 Java 1.4 和更早版本中的默认方法。 尽管下面的示例使用泛型,所以您需要 Java 1.5 +才能执行它
...
...
docs/75.md
浏览文件 @
b2d39606
# Java
HashMap
内联初始化
# Java
`HashMap`
内联初始化
> 原文: [https://javatutorial.net/java-hashmap-inline-initialization](https://javatutorial.net/java-hashmap-inline-initialization)
> 原文: [https://javatutorial.net/java-hashmap-inline-initialization](https://javatutorial.net/java-hashmap-inline-initialization)
下面的示例演示如何使用标准方法和内联方法初始化 Java
[
HashMap
](
https://javatutorial.net/java-hashmap-example
)
。
下面的示例演示如何使用标准方法和内联方法初始化 Java
[
HashMap
](
https://javatutorial.net/java-hashmap-example
)
。
## 为什么我们需要直接初始化
[HashMap
](https://javatutorial.net/java-hashmap-example) ?
## 为什么我们需要直接初始化
[`HashMap`
](https://javatutorial.net/java-hashmap-example) ?
尽管 Maps 被广泛用于以动态方式收集和处理数据,但通常您需要创建一个带有预定义键和值的小
地图,以测试一种简短的算法或您正在研究的概念。 手动初始化 Java HashMap 的另一个用例是测试程序或算法如何使用特定值执行。 在编写简短的演示程序时,您很可能更愿意直接初始化地图,而不是从文件或某种流中读取数据并用值填充地图
。 您可以想象,与单行 HashMap 初始化相比,您需要花费更多的精力。
尽管 Maps 被广泛用于以动态方式收集和处理数据,但通常您需要创建一个带有预定义键和值的小
映射,以测试一种简短的算法或您正在研究的概念。 手动初始化 Java HashMap 的另一个用例是测试程序或算法如何使用特定值执行。 在编写简短的演示程序时,您很可能更愿意直接初始化映射,而不是从文件或某种流中读取数据并用值填充映射
。 您可以想象,与单行 HashMap 初始化相比,您需要花费更多的精力。
![](
img/ad0c213c2121594bbf7c044f4c63b997.jpg
)
![](
img/ad0c213c2121594bbf7c044f4c63b997.jpg
)
Java 初始化 HashMap
Java 初始化 HashMap
## 初始化
HashMap
的必要方法
## 初始化
`HashMap`
的必要方法
直接的解决方案是声明一个 Map,然后只需 put()进入 Map。 我们将使用此示例作为参考,以与其他更节省类型的技术进行比较。
直接的解决方案是声明一个 Map,然后只需 put()进入 Map。 我们将使用此示例作为参考,以与其他更节省类型的技术进行比较。
...
@@ -22,9 +22,9 @@ test.put("A","one");
...
@@ -22,9 +22,9 @@ test.put("A","one");
test
.
put
(
"B"
,
"two"
);
test
.
put
(
"B"
,
"two"
);
```
```
如您在上面的示例中看到的,首先创建一个
地图对象,然后在其中放置条目。 这里要提到的另一重要事项是,通过使用此方法,您可以创建动态地图
,并且可以编辑,删除或创建新条目。
如您在上面的示例中看到的,首先创建一个
映射对象,然后在其中放置条目。 这里要提到的另一重要事项是,通过使用此方法,您可以创建动态映射
,并且可以编辑,删除或创建新条目。
## 使用匿名子类初始化
HashMap
## 使用匿名子类初始化
`HashMap`
这将创建 HashMap 的匿名子类,其实例初始化程序将这些值放入。 换句话说,它将创建一个继承自 HashMap 的新类。 这是创建和初始化动态 HashMap 的最短方法
这将创建 HashMap 的匿名子类,其实例初始化程序将这些值放入。 换句话说,它将创建一个继承自 HashMap 的新类。 这是创建和初始化动态 HashMap 的最短方法
...
@@ -37,9 +37,9 @@ Map<Integer, String> mymap = new HashMap<Integer, String>() {
...
@@ -37,9 +37,9 @@ Map<Integer, String> mymap = new HashMap<Integer, String>() {
};
};
```
```
## 初始化不可变
地图
## 初始化不可变
映射
与动态
地图(如上例所示)相比,不可变地图
是不可编辑的。 这意味着您不能在其中添加新条目,删除条目或更新它们。 如果您想测试一个简单的算法,它们将对您很好。
与动态
映射(如上例所示)相比,不可变映射
是不可编辑的。 这意味着您不能在其中添加新条目,删除条目或更新它们。 如果您想测试一个简单的算法,它们将对您很好。
## 在 Java SE 8 和更早版本中初始化不可变映射
## 在 Java SE 8 和更早版本中初始化不可变映射
...
@@ -53,9 +53,9 @@ mymap.put(3,"three");
...
@@ -53,9 +53,9 @@ mymap.put(3,"three");
Map
<
Integer
,
String
>
immutableMap
=
Collections
.
unmodifiableMap
(
mymap
);
Map
<
Integer
,
String
>
immutableMap
=
Collections
.
unmodifiableMap
(
mymap
);
```
```
如您所见,您以老式方式创建和初始化 Map。 使
地图
不可变的原因是对 Collections.unmodifiableMap(Map map)的调用。 好吧,它看起来不太像内联初始化。 不用担心,下一个示例可以。
如您所见,您以老式方式创建和初始化 Map。 使
映射
不可变的原因是对 Collections.unmodifiableMap(Map map)的调用。 好吧,它看起来不太像内联初始化。 不用担心,下一个示例可以。
## 以 Guava 方式内联初始化
HashMap
## 以 Guava 方式内联初始化
`HashMap`
[
Guava
](
https://github.com/google/guava
)
是第一个引入真正的单行 Map 初始化的人。 参见下面的例子
[
Guava
](
https://github.com/google/guava
)
是第一个引入真正的单行 Map 初始化的人。 参见下面的例子
...
@@ -63,7 +63,7 @@ Map<Integer,String> immutableMap = Collections.unmodifiableMap(mymap);
...
@@ -63,7 +63,7 @@ Map<Integer,String> immutableMap = Collections.unmodifiableMap(mymap);
Map
<
String
,
Integer
>
left
=
ImmutableMap
.
of
(
"a"
,
1
,
"b"
,
2
,
"c"
,
3
);
Map
<
String
,
Integer
>
left
=
ImmutableMap
.
of
(
"a"
,
1
,
"b"
,
2
,
"c"
,
3
);
```
```
## 用 Java 9 方式内联初始化
HashMap
## 用 Java 9 方式内联初始化
`HashMap`
最后,在 Java 9 中,我们可以使用单行语句来初始化不可变的 HashMap,而无需第三方库。
最后,在 Java 9 中,我们可以使用单行语句来初始化不可变的 HashMap,而无需第三方库。
...
...
docs/76.md
浏览文件 @
b2d39606
# Java 中
HashMap 和 TreeMap
之间的区别
# Java 中
`HashMap`和`TreeMap`
之间的区别
> 原文: [https://javatutorial.net/difference-between-hashmap-and-treemap-in-java](https://javatutorial.net/difference-between-hashmap-and-treemap-in-java)
> 原文: [https://javatutorial.net/difference-between-hashmap-and-treemap-in-java](https://javatutorial.net/difference-between-hashmap-and-treemap-in-java)
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
Java 中 HashMap 和 TreeMap 之间的区别
Java 中 HashMap 和 TreeMap 之间的区别
##
HashMap 和 TreeMap
之间的主要区别
##
`HashMap`和`TreeMap`
之间的主要区别
**TreeMap**
是
[
SortedMap
](
https://javatutorial.net/java-sortedmap-example
)
的示例,由 Red-Black 树实现,这意味着对键的顺序进行了排序。 遍历键时,您可以依靠它们会井然有序的事实。 键的顺序由元素的
`compareTo()`
方法或外部提供的
[
比较器
](
https://javatutorial.net/java-comparator-example
)
确定。
**TreeMap**
是
[
SortedMap
](
https://javatutorial.net/java-sortedmap-example
)
的示例,由 Red-Black 树实现,这意味着对键的顺序进行了排序。 遍历键时,您可以依靠它们会井然有序的事实。 键的顺序由元素的
`compareTo()`
方法或外部提供的
[
比较器
](
https://javatutorial.net/java-comparator-example
)
确定。
...
@@ -86,7 +86,7 @@ TreeMap iteration order =======
...
@@ -86,7 +86,7 @@ TreeMap iteration order =======
如您所见,在 HashMap 上进行迭代时,我们以“随机”顺序获得条目。 另一方面,TreeMap 迭代以其自然顺序返回条目。
如您所见,在 HashMap 上进行迭代时,我们以“随机”顺序获得条目。 另一方面,TreeMap 迭代以其自然顺序返回条目。
## 实
施复杂性
差异
## 实
现复杂度
差异
由于 HashMap 实现的复杂度为 O(1),因此通常可以认为 HashMap 效率更高,因此无论您何时在乎键的顺序,都可以使用它。 另一方面,TreeMap 中获取,放置和删除操作的复杂度为 O(log(n))
由于 HashMap 实现的复杂度为 O(1),因此通常可以认为 HashMap 效率更高,因此无论您何时在乎键的顺序,都可以使用它。 另一方面,TreeMap 中获取,放置和删除操作的复杂度为 O(log(n))
...
...
docs/77.md
浏览文件 @
b2d39606
#
图形 Java
示例
#
Java 图
示例
> 原文: [https://javatutorial.net/graphs-java-example](https://javatutorial.net/graphs-java-example)
> 原文: [https://javatutorial.net/graphs-java-example](https://javatutorial.net/graphs-java-example)
图形通常由顶点和弧线组成。 有时,它们也称为节点(而不是顶点)和边
缘
(而不是弧)。 为了本教程的缘故,我将使用节点和边作为参考。
图形通常由顶点和弧线组成。 有时,它们也称为节点(而不是顶点)和边(而不是弧)。 为了本教程的缘故,我将使用节点和边作为参考。
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
## 有向图
## 有向图
定向图形时,这意味着只能沿其“指向”的方向遍历这些边
缘
。
定向图形时,这意味着只能沿其“指向”的方向遍历这些边。
![
Directed graph
](
img/d925c10d009f3ac8a8168d9036caa201.jpg
)
![
Directed graph
](
img/d925c10d009f3ac8a8168d9036caa201.jpg
)
...
@@ -83,7 +83,7 @@ Node.java 有 3 个方法和 1 个构造函数。
...
@@ -83,7 +83,7 @@ Node.java 有 3 个方法和 1 个构造函数。
**getNodeId()**
仅返回每个节点的 ID。
**getNodeId()**
仅返回每个节点的 ID。
**addNeighbour(Edge e)**
通过边
缘创建连接,该边缘作为参数传递到另一个节点。 这是通过将指定的边添加到 Node 类的边列表中来完成的。
**注意**
,存在一个 if 条件,用于检查此节点的当前边缘中是否已经存在指定的边缘
**e**
。
**addNeighbour(Edge e)**
通过边
创建连接,该边作为参数传递到另一个节点。 这是通过将指定的边添加到 Node 类的边列表中来完成的。
**注意**
,存在一个 if 条件,用于检查此节点的当前边中是否已经存在指定的边
**e**
。
**getNeighbours()**
仅用于显示目的。 查看
**输出**
,以查看此方法显示信息的精确程度。
**getNeighbours()**
仅用于显示目的。 查看
**输出**
,以查看此方法显示信息的精确程度。
...
@@ -136,13 +136,13 @@ Edge.java 有 6 个方法和 1 个构造函数。
...
@@ -136,13 +136,13 @@ Edge.java 有 6 个方法和 1 个构造函数。
**getId()**
仅返回当前边的 ID。
**getId()**
仅返回当前边的 ID。
**getStart()**
返回边
缘
从其开始的 Node 对象。
**getStart()**
返回边从其开始的 Node 对象。
**getIdOfStartNode()**
返回边
缘
从其开始的 Node 对象的 ID。
**getIdOfStartNode()**
返回边从其开始的 Node 对象的 ID。
**getEnd()**
返回边
缘
“停止”在的 Node 对象。
**getEnd()**
返回边“停止”在的 Node 对象。
**getIdOfEndNode()**
返回边
缘
“停止”在的 Node 对象的 ID。
**getIdOfEndNode()**
返回边“停止”在的 Node 对象的 ID。
**getWeight()**
获取当前 Node 对象的权重。
**getWeight()**
获取当前 Node 对象的权重。
...
@@ -215,7 +215,7 @@ Main.java 只有一个 main 方法。
...
@@ -215,7 +215,7 @@ Main.java 只有一个 main 方法。
在 main 方法中创建一个图形。 之后,将创建 3 个 Node 实例。 然后,使用
**createNode(Node 节点)**
方法将这些 Node 实例添加到图形中。 之后,将创建 2 个 Edge 实例。 第一个将节点 1 连接到节点 2。第二个将节点 1 连接到节点 3。
在 main 方法中创建一个图形。 之后,将创建 3 个 Node 实例。 然后,使用
**createNode(Node 节点)**
方法将这些 Node 实例添加到图形中。 之后,将创建 2 个 Edge 实例。 第一个将节点 1 连接到节点 2。第二个将节点 1 连接到节点 3。
此后,存在一个 if 条件,该条件检查节点数是否大于 1,如果超过,则将“ Neighbour”添加到 node1。 (e12 是连接 node1 和 node2 的边
缘。)(e13 是连接 node1 和 node3 的边缘
)。
此后,存在一个 if 条件,该条件检查节点数是否大于 1,如果超过,则将“ Neighbour”添加到 node1。 (e12 是连接 node1 和 node2 的边
。)(e13 是连接 node1 和 node3 的边
)。
**输出**
**输出**
...
...
docs/78.md
浏览文件 @
b2d39606
...
@@ -8,13 +8,13 @@
...
@@ -8,13 +8,13 @@
深度优先搜索(简称 DFS)从一个未访问的节点开始,然后开始选择一个相邻节点,直到没有剩余节点为止。 执行完该“过程”之后,您将回溯到另一个选择节点的选择,如果没有,则只需选择另一个未访问的节点即可。
深度优先搜索(简称 DFS)从一个未访问的节点开始,然后开始选择一个相邻节点,直到没有剩余节点为止。 执行完该“过程”之后,您将回溯到另一个选择节点的选择,如果没有,则只需选择另一个未访问的节点即可。
## 使用
堆
栈实现
## 使用栈实现
![
DFS Iterative
](
img/677972a44b34e24ae1c260f8cc776225.jpg
)
![
DFS Iterative
](
img/677972a44b34e24ae1c260f8cc776225.jpg
)
上图访问的节点的顺序为:5 10 25 30 35 40 15 20
上图访问的节点的顺序为:5 10 25 30 35 40 15 20
###
**使用堆栈数据结构实现 DFS**
###
使用栈数据结构实现 DFS
Node.java 代表上图中的每个“球”或“圆”。 它有一个
**值**
,它代表每个球的“值”。 它也有一个名为
**Visited**
的布尔变量,顾名思义,它表示遍历是否访问了 Node。 第三个实例变量 Node 类具有一个 ArrayList,它表示当前节点
**_ 与 _**
的所有相邻节点(或相邻节点)。 (如果您想了解有关 ArrayList 的更多信息,可以查看
[
本教程
](
https://javatutorial.net/java-arraylist-example
)
。)
Node.java 代表上图中的每个“球”或“圆”。 它有一个
**值**
,它代表每个球的“值”。 它也有一个名为
**Visited**
的布尔变量,顾名思义,它表示遍历是否访问了 Node。 第三个实例变量 Node 类具有一个 ArrayList,它表示当前节点
**_ 与 _**
的所有相邻节点(或相邻节点)。 (如果您想了解有关 ArrayList 的更多信息,可以查看
[
本教程
](
https://javatutorial.net/java-arraylist-example
)
。)
...
@@ -65,7 +65,7 @@ public class Node{
...
@@ -65,7 +65,7 @@ public class Node{
此类只有一种方法:解决方案。
此类只有一种方法:解决方案。
它使用
堆栈数据结构,并以节点为元素。 它将指定的元素添加到节点,然后将其标记为已访问。 在那之后,有一个 while 循环,不断检查堆栈是否为空。 如果不是,则从堆栈中删除一个元素,获取要删除的元素的邻居。 然后,存在另一个循环,其目的是将每个邻居节点标记为已访问,并将该邻居节点添加到堆
栈中。
它使用
栈数据结构,并以节点为元素。 它将指定的元素添加到节点,然后将其标记为已访问。 在那之后,有一个 while 循环,不断检查栈是否为空。 如果不是,则从栈中删除一个元素,获取要删除的元素的邻居。 然后,存在另一个循环,其目的是将每个邻居节点标记为已访问,并将该邻居节点添加到
栈中。
```
java
```
java
import
java.util.*
;
import
java.util.*
;
...
...
docs/79.md
浏览文件 @
b2d39606
...
@@ -18,9 +18,9 @@ BFS 使用与深度优先搜索完全相反的工作流程,反之亦然。
...
@@ -18,9 +18,9 @@ BFS 使用与深度优先搜索完全相反的工作流程,反之亦然。
BFS 的工作流程
BFS 的工作流程
## BFS 的实
施
## BFS 的实
现
实
施
BFS 时要遵循两个简单的规则:
实
现
BFS 时要遵循两个简单的规则:
1.
访问给定层上的每个元素
1.
访问给定层上的每个元素
2.
移至下一层
2.
移至下一层
...
...
docs/80.md
浏览文件 @
b2d39606
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
> 原文: [https://javatutorial.net/algorithm-time-complexities](https://javatutorial.net/algorithm-time-complexities)
> 原文: [https://javatutorial.net/algorithm-time-complexities](https://javatutorial.net/algorithm-time-complexities)
在开始解释不同的时间复杂
性
之前,让我们首先看一下实际的算法是什么。
在开始解释不同的时间复杂
度
之前,让我们首先看一下实际的算法是什么。
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
![
java-featured-image
](
img/e0db051dedc1179e7424b6d998a6a772.jpg
)
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
算法工作流程
算法工作流程
尽管听起来很简单且不复杂,但事实恰恰相反。 许多算法要花费大量时间才能完成某件事,而有些则没有。 这就是为什么了解给定算法的
**复杂度**
非常重要的原因。 那是因为通过了解算法的复杂
性
,可以使我们了解算法的“价值”,或者说效率如何。
尽管听起来很简单且不复杂,但事实恰恰相反。 许多算法要花费大量时间才能完成某件事,而有些则没有。 这就是为什么了解给定算法的
**复杂度**
非常重要的原因。 那是因为通过了解算法的复杂
度
,可以使我们了解算法的“价值”,或者说效率如何。
算法示例:
算法示例:
...
@@ -71,7 +71,7 @@
...
@@ -71,7 +71,7 @@
“花费的时间不会超过且不短于”
“花费的时间不会超过且不短于”
## 如何确定给定程序的复杂
性
## 如何确定给定程序的复杂
度
```
java
```
java
int
sumArray
(
int
[]
aiNumbers
)
int
sumArray
(
int
[]
aiNumbers
)
...
@@ -83,9 +83,9 @@ int sumArray(int[] aiNumbers)
...
@@ -83,9 +83,9 @@ int sumArray(int[] aiNumbers)
}
}
```
```
该程序的复杂
性
只是 aiNumbers.length。 因此,如果此数组的长度为 4,则复杂度为 4。如果 aiNumbers.length 为 6,则复杂度为 6。
该程序的复杂
度
只是 aiNumbers.length。 因此,如果此数组的长度为 4,则复杂度为 4。如果 aiNumbers.length 为 6,则复杂度为 6。
复杂
性
是 aiNumbers.length 的原因是因为它会循环 aiNumbers.length 次。 因此,复杂度为 O(N)。
复杂
度
是 aiNumbers.length 的原因是因为它会循环 aiNumbers.length 次。 因此,复杂度为 O(N)。
```
java
```
java
N
=
in
.
length
;
N
=
in
.
length
;
...
@@ -119,4 +119,4 @@ for (int i = 0; i < n; i++) {
...
@@ -119,4 +119,4 @@ for (int i = 0; i < n; i++) {
图片来源:
[
https://adrianmejia.com/most-popular-algorithms-time-complexity-every-programmer-should-know-free-online-tutorial-course/
](
https://adrianmejia.com/most-popular-algorithms-time-complexity-every-programmer-should-know-free-online-tutorial-course/
)
图片来源:
[
https://adrianmejia.com/most-popular-algorithms-time-complexity-every-programmer-should-know-free-online-tutorial-course/
](
https://adrianmejia.com/most-popular-algorithms-time-complexity-every-programmer-should-know-free-online-tutorial-course/
)
在算法和复杂性方面,请尽可能尝试优化算法。 这样做的一个好方法是使用集合等在输入数据中找到共同点。请记住:内存很昂贵,您的时间也很昂贵。
在算法和复杂度方面,请尽可能尝试优化算法。 这样做的一个好方法是使用集合等在输入数据中找到共同点。请记住:内存很昂贵,您的时间也很昂贵。
\ No newline at end of file
\ No newline at end of file
docs/84.md
浏览文件 @
b2d39606
...
@@ -10,7 +10,7 @@ Java 8 引入了新的 Date-Time API,其目的是弥补旧的 date-time API
...
@@ -10,7 +10,7 @@ Java 8 引入了新的 Date-Time API,其目的是弥补旧的 date-time API
新的 API 不仅解决了所有这些问题,而且还引入了
`java.time`
包中的 2 个重要类:
新的 API 不仅解决了所有这些问题,而且还引入了
`java.time`
包中的 2 个重要类:
*
本地 –时区处理没有复杂
性
*
本地 –时区处理没有复杂
度
*
分区的 –处理各种时区的更复杂的日期时间 API
*
分区的 –处理各种时区的更复杂的日期时间 API
**当地时间 API**
在不需要时区时应使用
**当地时间 API**
在不需要时区时应使用
...
...
docs/99.md
浏览文件 @
b2d39606
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
Java 中的每个类都有一个由用户显式设置或默认设置的构造函数。 当可以借助许多不同的参数(可能是强制性的,而其他参数也可能是可选的)创建对象时,将使用构建器模式。 在这种情况下,事情变得复杂并且容易出错。 因此,在这种情况下,构建器模式会派上用场。
Java 中的每个类都有一个由用户显式设置或默认设置的构造函数。 当可以借助许多不同的参数(可能是强制性的,而其他参数也可能是可选的)创建对象时,将使用构建器模式。 在这种情况下,事情变得复杂并且容易出错。 因此,在这种情况下,构建器模式会派上用场。
实
施
构建器设计模式的步骤:
实
现
构建器设计模式的步骤:
1.
使用所有必填字段创建一个构建器类
1.
使用所有必填字段创建一个构建器类
2.
Builder 类应具有带有所有必需参数的公共构造函数
2.
Builder 类应具有带有所有必需参数的公共构造函数
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录