提交 9ef7e2b8 编写于 作者: W wizardforcel

2020-07-09 09:58:40

上级 efd94986
...@@ -164,7 +164,7 @@ printf("I am %d years old", 25); ...@@ -164,7 +164,7 @@ printf("I am %d years old", 25);
Here, Here,
* `"I am %d years old"`,是格式化字符串 * `"I am %d years old"`,是格式化字符串
* `%d`是格式化字符串中的整数数据 * `%d`是格式化字符串中的整数占位符
* 25 是一个参数 * 25 是一个参数
格式化的字符串包括文本和数据。 并且,参数替换了格式化字符串中的数据。 格式化的字符串包括文本和数据。 并且,参数替换了格式化字符串中的数据。
......
...@@ -48,7 +48,7 @@ Writer output = new FileWriter(); ...@@ -48,7 +48,7 @@ Writer output = new FileWriter();
* `write(String data)` - 将指定的字符串写入写入器 * `write(String data)` - 将指定的字符串写入写入器
* `append(char c)` - 将指定字符插入当前写入器 * `append(char c)` - 将指定字符插入当前写入器
* `flush()` - 强制将写入器中存在的所有数据写入相应的目的地 * `flush()` - 强制将写入器中存在的所有数据写入相应的目的地
* `close()` - 关闭作者 * `close()` - 关闭写入器
* * * * * *
......
...@@ -170,6 +170,6 @@ The character encoding of output2: UTF8 ...@@ -170,6 +170,6 @@ The character encoding of output2: UTF8
| 方法 | 描述 | | 方法 | 描述 |
| --- | --- | | --- | --- |
| `flush()` | 强制将写入器中存在的所有数据写入相应的目的地 | | `flush()` | 强制将写入器中存在的所有数据写入相应的目的地 |
| `append()` | 将指定字符插入当前作者 | | `append()` | 将指定字符插入当前写入器 |
要了解更多信息,请访问 [Java `OutputStreamWriter`(Java 官方文档)](https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html "Java OutputStreamWriter (official Java documentation)") 要了解更多信息,请访问 [Java `OutputStreamWriter`(Java 官方文档)](https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html "Java OutputStreamWriter (official Java documentation)")
\ No newline at end of file
...@@ -166,6 +166,6 @@ The character encoding of output2: UTF8 ...@@ -166,6 +166,6 @@ The character encoding of output2: UTF8
| 方法 | 描述 | | 方法 | 描述 |
| --- | --- | | --- | --- |
| `flush()` | 强制将写入器中存在的所有数据写入相应的目的地 | | `flush()` | 强制将写入器中存在的所有数据写入相应的目的地 |
| `append()` | 将指定字符插入当前作者 | | `append()` | 将指定字符插入当前写入器 |
要了解更多信息,请访问 [Java `FileWriter`(Java 官方文档)](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/FileWriter.html "Java FileWriter (official Java documentation)") 要了解更多信息,请访问 [Java `FileWriter`(Java 官方文档)](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/FileWriter.html "Java FileWriter (official Java documentation)")
\ No newline at end of file
...@@ -168,7 +168,7 @@ Data is flushed to the file. ...@@ -168,7 +168,7 @@ Data is flushed to the file.
| 方法 | 描述 | | 方法 | 描述 |
| --- | --- | | --- | --- |
| `newLine()` | 向作者插入新行 | | `newLine()` | 向写入器插入新行 |
| `append()` | 将指定字符插入当前作者 | | `append()` | 将指定字符插入当前写入器 |
要了解更多信息,请访问 [Java `BufferedWriter`(Java 官方文档)](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/BufferedWriter.html "Java BufferedWriter (official Java documentation)") 要了解更多信息,请访问 [Java `BufferedWriter`(Java 官方文档)](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/BufferedWriter.html "Java BufferedWriter (official Java documentation)")
\ No newline at end of file
...@@ -158,6 +158,6 @@ String: This is the original data ...@@ -158,6 +158,6 @@ String: This is the original data
| 方法 | 描述 | | 方法 | 描述 |
| --- | --- | | --- | --- |
| `flush()` | 强制将写入器中存在的所有数据写入字符串缓冲区 | | `flush()` | 强制将写入器中存在的所有数据写入字符串缓冲区 |
| `append()` | 将指定字符插入当前作者 | | `append()` | 将指定字符插入当前写入器 |
要了解更多信息,请访问 [Java `StringWriter`(Java 官方文档)](https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/io/StringWriter.html "Java StringWriter (official Java documentation)") 要了解更多信息,请访问 [Java `StringWriter`(Java 官方文档)](https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/io/StringWriter.html "Java StringWriter (official Java documentation)")
\ No newline at end of file
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
## `PrintWriter`的工作原理 ## `PrintWriter`的工作原理
与其他作者不同,`PrintWriter`将原始数据(`int``float``char`等)转换为文本格式。 然后,它将格式化的数据写入写入器。 与其他写入器不同,`PrintWriter`将原始数据(`int``float``char`等)转换为文本格式。 然后,它将格式化的数据写入写入器。
另外,`PrintWriter`类不会引发任何输入/输出异常。 相反,我们需要使用`checkError()`方法来查找其中的任何错误。 另外,`PrintWriter`类不会引发任何输入/输出异常。 相反,我们需要使用`checkError()`方法来查找其中的任何错误。
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
## 创建一个`PrintWriter` ## 创建一个`PrintWriter`
为了创建打印作者,我们必须首先导入`java.io.PrintWriter`包。 导入包后,就可以创建打印`Writer`了。 为了创建打印写入器,我们必须首先导入`java.io.PrintWriter`包。 导入包后,就可以创建打印`Writer`了。
**1.使用其他写入器** **1.使用其他写入器**
...@@ -137,8 +137,8 @@ printf("I am %d years old", 25); ...@@ -137,8 +137,8 @@ printf("I am %d years old", 25);
Here, Here,
* `%d`,是格式化字符串 * `"I am %d years old"`,是格式化字符串
* `%d`是格式化字符串中的整数数据 * `%d`是格式化字符串中的整数占位符
* 25 是一个参数 * 25 是一个参数
格式化的字符串包括文本和数据。 并且,参数替换了格式化字符串中的数据。 格式化的字符串包括文本和数据。 并且,参数替换了格式化字符串中的数据。
......
...@@ -80,6 +80,6 @@ Then, to find the largest, the following conditions are checked using if else st ...@@ -80,6 +80,6 @@ Then, to find the largest, the following conditions are checked using if else st
* 如果`n1`大于或等于`n2`,则 * 如果`n1`大于或等于`n2`,则
* 如果`n1`大于或等于`n3`,则`n1`最大。 * 如果`n1`大于或等于`n3`,则`n1`最大。
* 否则,`n3`最大。 * 否则,`n3`最大。
* 其他 * 否则
* 如果`n2`大于或等于`n3`,则`n2`最大。 * 如果`n2`大于或等于`n3`,则`n2`最大。
* 否则,`n3`最大。 * 否则,`n3`最大。
\ No newline at end of file
...@@ -47,7 +47,7 @@ BlockingQueue<String> animal2 = new LinkedBlockingQueue<>(); ...@@ -47,7 +47,7 @@ BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();
* `add()` - 在队列的末尾将元素插入到阻塞队列。 如果队列已满,则引发异常。 * `add()` - 在队列的末尾将元素插入到阻塞队列。 如果队列已满,则引发异常。
* `element()` - 返回阻塞队列的开头。 如果队列为空,则引发异常。 * `element()` - 返回阻塞队列的开头。 如果队列为空,则引发异常。
* `remove()` - 从阻队列中删除一个元素。 如果队列为空,则引发异常。 * `remove()` - 从阻队列中删除一个元素。 如果队列为空,则引发异常。
* * * * * *
...@@ -55,7 +55,7 @@ BlockingQueue<String> animal2 = new LinkedBlockingQueue<>(); ...@@ -55,7 +55,7 @@ BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();
* `offer()` - 将指定的元素插入到队列末尾的阻塞队列中。 如果队列已满,则返回`false` * `offer()` - 将指定的元素插入到队列末尾的阻塞队列中。 如果队列已满,则返回`false`
* `peek()` - 返回阻塞队列的开头。 如果队列为空,则返回`null` * `peek()` - 返回阻塞队列的开头。 如果队列为空,则返回`null`
* `poll()` - 从阻队列中删除一个元素。 如果队列为空,则返回`null` * `poll()` - 从阻队列中删除一个元素。 如果队列为空,则返回`null`
**`offer()`和`poll()`** **`offer()`和`poll()`**
...@@ -80,7 +80,7 @@ offer(value, 100, milliseconds) ...@@ -80,7 +80,7 @@ offer(value, 100, milliseconds)
`BlockingQueue`还提供了阻止操作并等待队列已满或为空的方法。 `BlockingQueue`还提供了阻止操作并等待队列已满或为空的方法。
* `put()` - 将元素插入阻队列。 如果队列已满,它将等待直到队列有空间插入元素。 * `put()` - 将元素插入阻队列。 如果队列已满,它将等待直到队列有空间插入元素。
* `take()` - 从阻塞队列中删除并返回一个元素。 如果队列为空,它将等待直到队列中有要删除的元素。 * `take()` - 从阻塞队列中删除并返回一个元素。 如果队列为空,它将等待直到队列中有要删除的元素。
假设我们想将元素插入队列。 如果队列已满,则`put()`方法将等待,直到队列有空间插入元素。 假设我们想将元素插入队列。 如果队列已满,则`put()`方法将等待,直到队列有空间插入元素。
......
...@@ -14,9 +14,9 @@ Java 集合框架的`ArrayBlockingQueue`类使用数组提供阻塞队列实现 ...@@ -14,9 +14,9 @@ Java 集合框架的`ArrayBlockingQueue`类使用数组提供阻塞队列实现
## 创建`ArrayBlockingQueue` ## 创建`ArrayBlockingQueue`
为了创建一个数组阻队列,我们​​必须导入`java.util.concurrent.ArrayBlockingQueue`包。 为了创建一个数组阻队列,我们​​必须导入`java.util.concurrent.ArrayBlockingQueue`包。
导入包后,可以使用以下方法在 Java 中创建数组阻队列: 导入包后,可以使用以下方法在 Java 中创建数组阻队列:
```java ```java
ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity); ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity);
...@@ -24,8 +24,8 @@ ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity); ...@@ -24,8 +24,8 @@ ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity);
这里, 这里,
* `Type` - 数组阻队列的类型 * `Type` - 数组阻队列的类型
* `容量` - 数组阻塞队列的大小 * `capcity` - 数组阻塞队列的大小
例如, 例如,
...@@ -45,7 +45,7 @@ ArrayBlockingQueue<Integer> age = new ArrayBlockingQueue<>(5); ...@@ -45,7 +45,7 @@ ArrayBlockingQueue<Integer> age = new ArrayBlockingQueue<>(5);
`ArrayBlockingQueue`类提供`BlockingQueue`接口中所有方法的实现。 `ArrayBlockingQueue`类提供`BlockingQueue`接口中所有方法的实现。
这些方法用于从数组阻队列中插入,访问和删除元素。 这些方法用于从数组阻队列中插入,访问和删除元素。
另外,我们还将学习两种支持数组阻塞队列中阻塞操作的方法`put()``take()` 另外,我们还将学习两种支持数组阻塞队列中阻塞操作的方法`put()``take()`
...@@ -55,8 +55,8 @@ ArrayBlockingQueue<Integer> age = new ArrayBlockingQueue<>(5); ...@@ -55,8 +55,8 @@ ArrayBlockingQueue<Integer> age = new ArrayBlockingQueue<>(5);
### 插入元素 ### 插入元素
* `add()` - 将指定的元素插入数组阻队列。 如果队列已满,它将引发异常。 * `add()` - 将指定的元素插入数组阻队列。 如果队列已满,它将引发异常。
* `offer()` - 将指定的元素插入数组阻队列。 如果队列已满,则返回`false` * `offer()` - 将指定的元素插入数组阻队列。 如果队列已满,则返回`false`
例如: 例如:
...@@ -88,8 +88,8 @@ ArrayBlockingQueue: [Dog, Cat, Horse] ...@@ -88,8 +88,8 @@ ArrayBlockingQueue: [Dog, Cat, Horse]
### 访问元素 ### 访问元素
* `peek()` - 从数组阻队列的前面返回一个元素。 如果队列为空,则返回`null` * `peek()` - 从数组阻队列的前面返回一个元素。 如果队列为空,则返回`null`
* `iterator()` - 返回一个迭代器对象,以顺序访问数组阻队列中的元素。 如果队列为空,则抛出异常。 我们必须导入`java.util.Iterator`包才能使用它。 * `iterator()` - 返回一个迭代器对象,以顺序访问数组阻队列中的元素。 如果队列为空,则抛出异常。 我们必须导入`java.util.Iterator`包才能使用它。
例如: 例如:
...@@ -135,9 +135,9 @@ ArrayBlockingQueue Elements: Dog, Cat, Horse, ...@@ -135,9 +135,9 @@ ArrayBlockingQueue Elements: Dog, Cat, Horse,
### 删除元素 ### 删除元素
* `remove()` - 返回并从数组阻队列中删除指定的元素。 如果队列为空,则抛出异常。 * `remove()` - 返回并从数组阻队列中删除指定的元素。 如果队列为空,则抛出异常。
* `poll()` - 返回并从数组阻队列中删除指定的元素。 如果队列为空,则返回`null` * `poll()` - 返回并从数组阻队列中删除指定的元素。 如果队列为空,则返回`null`
* `clear()` - 从数组阻队列中删除所有元素。 * `clear()` - 从数组阻队列中删除所有元素。
例如: 例如:
...@@ -272,10 +272,10 @@ Removed Element: Dog ...@@ -272,10 +272,10 @@ Removed Element: Dog
| 方法 | 内容描述 | | 方法 | 内容描述 |
| --- | --- | | --- | --- |
| `contains(element)` | 在数组阻队列中搜索指定的元素。 如果找到该元素,则返回`true`,否则返回`false`。 | | `contains(element)` | 在数组阻队列中搜索指定的元素。 如果找到该元素,则返回`true`,否则返回`false`。 |
| `size()` | 返回数组阻塞队列的长度。 | | `size()` | 返回数组阻塞队列的长度。 |
| `toArray()` | 将数组阻塞队列转换为数组并返回它。 | | `toArray()` | 将数组阻塞队列转换为数组并返回它。 |
| `toString()` | 将数组阻队列转换为字符串 | | `toString()` | 将数组阻队列转换为字符串 |
* * * * * *
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#### 在本教程中,我们将借助示例学习`LinkedBLockingQueue`类及其方法。 #### 在本教程中,我们将借助示例学习`LinkedBLockingQueue`类及其方法。
Java `Collections`框架的`LinkedBlockingQueue`类使用链接列表提供阻队列实现。 Java `Collections`框架的`LinkedBlockingQueue`类使用链接列表提供阻队列实现。
它实现了 [Java `BlockingQueue`接口](/java-programming/blockingqueue "Java BlockingQueue Interface") 它实现了 [Java `BlockingQueue`接口](/java-programming/blockingqueue "Java BlockingQueue Interface")
...@@ -35,7 +35,7 @@ LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>(int capacity); ...@@ -35,7 +35,7 @@ LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>(int capacity);
这里, 这里,
* `Type` - 链接的阻塞队列的类型 * `Type` - 链接的阻塞队列的类型
* `容量` - 链接的阻塞队列的大小 * `capcity` - 链接的阻塞队列的大小
例如, 例如,
...@@ -147,7 +147,7 @@ LinkedBlockingQueue Elements: Dog, Cat, Horse, ...@@ -147,7 +147,7 @@ LinkedBlockingQueue Elements: Dog, Cat, Horse,
* `remove()` - 返回指定的元素并将其从链接的阻塞队列中移除。 如果队列为空,则抛出异常。 * `remove()` - 返回指定的元素并将其从链接的阻塞队列中移除。 如果队列为空,则抛出异常。
* `poll()` - 返回指定的元素并将其从链接的阻塞队列中移除。 如果队列为空,则返回`null` * `poll()` - 返回指定的元素并将其从链接的阻塞队列中移除。 如果队列为空,则返回`null`
* `clear()` - 从链接的阻队列中删除所有元素。 * `clear()` - 从链接的阻队列中删除所有元素。
例如: 例如:
...@@ -284,7 +284,7 @@ New LinkedBlockingQueue: [Cat] ...@@ -284,7 +284,7 @@ New LinkedBlockingQueue: [Cat]
| 方法 | 内容描述 | | 方法 | 内容描述 |
| --- | --- | | --- | --- |
| `contains(element)` | 在链接的阻队列中搜索指定的元素。 如果找到该元素,则返回`true`,否则返回`false`。 | | `contains(element)` | 在链接的阻队列中搜索指定的元素。 如果找到该元素,则返回`true`,否则返回`false`。 |
| `size()` | 返回链接的阻塞队列的长度。 | | `size()` | 返回链接的阻塞队列的长度。 |
| `toArray()` | 将链接的阻塞队列转换为数组并返回该数组。 | | `toArray()` | 将链接的阻塞队列转换为数组并返回该数组。 |
| `toString()` | 将链接的阻塞队列转换为字符串 | | `toString()` | 将链接的阻塞队列转换为字符串 |
......
...@@ -26,9 +26,9 @@ Java 集合框架的`Map`接口提供了映射数据结构的功能。 ...@@ -26,9 +26,9 @@ Java 集合框架的`Map`接口提供了映射数据结构的功能。
**注意**`Map`接口维护 3 个不同的集合: **注意**`Map`接口维护 3 个不同的集合:
* 密钥 *
* 一组值 * 值集
* 键/值关联(映射)的集合 * 键/值关联(映射)
因此,我们可以分别访问键,值和关联。 因此,我们可以分别访问键,值和关联。
......
...@@ -406,7 +406,7 @@ New HashMap: {Second=2, First=5} ...@@ -406,7 +406,7 @@ New HashMap: {Second=2, First=5}
`HashMap`中,我们可以 `HashMap`中,我们可以
* 通过其**键**进行迭代 * 遍历其**键**
* 遍历其**值** * 遍历其**值**
* 遍历其**键/值** * 遍历其**键/值**
......
...@@ -433,4 +433,4 @@ Here, ...@@ -433,4 +433,4 @@ Here,
* `ConcurrentHashMap`类允许多个线程同时访问其条目。 * `ConcurrentHashMap`类允许多个线程同时访问其条目。
* 默认情况下,并发哈希映射分为 **16 个段**。 这就是为什么允许 16 个线程同时并发修改映射的原因。 但是,任何数量的线程一次都可以访问该映射。 * 默认情况下,并发哈希映射分为 **16 个段**。 这就是为什么允许 16 个线程同时并发修改映射的原因。 但是,任何数量的线程一次都可以访问该映射。
* 如果指定的键已经存在,则`putIfAbsent()`方法将不会覆盖映射中的条目。 * 如果指定的键已经存在,则`putIfAbsent()`方法将不会覆盖映射中的条目。
* 它提供自己的同步。 * 它自己提供同步。
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册