# Java 中的`LinkedList`
> 原文: [https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/](https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/)
与 Java 中的数组类似,`LinkedList`是线性数据结构。但是,`LinkedList`元素不存储在像数组这样的连续位置中,它们使用指针相互链接。`LinkedList`的每个元素都具有指向`LinkedList`的下一个元素的引用(地址/指针)。
### 目录
1. [LinkedList 表示](#linkedlist)
2. [为什么我们需要一个链表?](#why)
3. [Java 中 LinkedList 类的层次结构](#hierarchy)
4. [Java 链表添加元素的例子](#add)
5. [Java 链表示例删除元素](#remove)
6. [Java 中的 LinkedList 示例](#example)
7. [LinkedList 类的方法](#methods)
8. [关于 LinkedList 的教程](#tutorials) ] - LinkedList 类的所有方法都在单独的教程中详细介绍
## `LinkedList`表示
`LinkedList`中的每个元素称为**节点**。`LinkedList`的每个节点包含两个项目:1)元素的内容 2)指向链表中的下一节点的指针/地址/引用。
**这就是`LinkedList`的样子:**
![Java LinkedList](https://img.kancloud.cn/d7/77/d777d1ae43b08d03f3e20e557575793a_743x250.jpg)
**注意:**
1. `LinkedList`的头仅包含`List`的第一个元素的地址。
2. `LinkedList`的最后一个元素在节点的指针部分包含`null`,因为它是`List`的结尾,因此它不指向任何内容,如上图所示。
3. 上图所示的图表示**单链表**。`LinkedList`的另一种复杂类型变体称为**双向链表**,双向链表的节点包含三部分:1)指向链表的前一节点的指针,2)元素的内容,3)指向链表的下一个节点的指针。
## 为什么我们需要链表?
你必须知道数组也是一个线性数据结构,但**数组有一些限制,如:
1)数组的大小是固定的**这是我们决定的创建一个数组,因此很难预先预测元素的数量,如果声明的大小不足,那么我们就不能增加数组的大小,如果我们声明一个大型数组并且不需要存储那么多的元素那么它是浪费记忆。
2)数组元素**需要连续的存储单元**来存储它们的值。
3)**在数组中插入一个元素是性能上昂贵的**,因为我们必须移动几个元素来为新元素腾出空间。例如:
假设我们有一个具有以下元素的数组:`10,12,15,20,4,5,100`,现在如果我们想要在具有值 12 的元素之后插入新元素 99 那么我们必须将 12 之后的所有元素移到右边,为新元素腾出空间。
类似地,**从数组中删除元素**也是性能上昂贵的操作,因为删除元素之后的所有元素都必须向左移位。
**通过提供以下功能在链表中处理这些限制:**
1. 链表允许**动态内存分配**,这意味着内存分配在运行时由编译器完成在链表声明中我们不需要提及列表的大小。
2. 链表元素**不需要连续的存储单元**,因为元素使用包含列表的下一个节点的地址的节点的引用部分相互链接。
3. 在链表中插入和删除操作的性能并不昂贵,因为从链表中添加和删除元素不需要元素移位,只需要更改前一个节点和下一个节点的指针。
## Java 中的`LinkedList`类的层次结构
![Java Linked list class hierarchy](https://img.kancloud.cn/9b/03/9b03dab6f00f6fbd6e5a24d13da13727_600x499.jpg)
## Java `LinkedList`添加元素的示例
在下面的例子中,我们使用`add()`,`addFirst()`和`addLast()`方法在`LinkedList`中的所需位置添加元素,`LinkedList`类中有几个这样有用的方法,我在本文末尾提到过文章。
```java
package com.beginnersbook;
import java.util.*;
public class JavaExample{
public static void main(String args[]){
LinkedList<String> list=new LinkedList<String>();
//Adding elements to the Linked list
list.add("Steve");
list.add("Carl");
list.add("Raj");
//Adding an element to the first position
list.addFirst("Negan");
//Adding an element to the last position
list.addLast("Rick");
//Adding an element to the 3rd position
list.add(2, "Glenn");
//Iterating LinkedList
Iterator<String> iterator=list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
```
**输出:**
![Java LinkedList adding elements](https://img.kancloud.cn/12/70/12707eb29196f1e8a4414286c6326c4d_312x298.jpg)
## 从`LinkedList`中删除元素的 Java 示例
在下面的示例中,我们将检查`LinkedList`中用于从`LinkedList`中的某些位置删除元素的几个流行的**删除方法**。这些方法的详细说明以及示例将在单独的教程中介绍,本文末尾提供了链接。
```java
package com.beginnersbook;
import java.util.*;
public class JavaExample{
public static void main(String args[]){
LinkedList<String> list=new LinkedList<String>();
//Adding elements to the Linked list
list.add("Steve");
list.add("Carl");
list.add("Raj");
list.add("Negan");
list.add("Rick");
//Removing First element
//Same as list.remove(0);
list.removeFirst();
//Removing Last element
list.removeLast();
//Iterating LinkedList
Iterator<String> iterator=list.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");
}
//removing 2nd element, index starts with 0
list.remove(1);
System.out.print("\nAfter removing second element: ");
//Iterating LinkedList again
Iterator<String> iterator2=list.iterator();
while(iterator2.hasNext()){
System.out.print(iterator2.next()+" ");
}
}
}
```
**输出:**
![Java LinkedList removing elements](https://img.kancloud.cn/39/a1/39a116babe78d8406cd8172f4dda7ac1_676x192.jpg)
## Java 中的`LinkedList`示例
```java
import java.util.*;
public class LinkedListExample {
public static void main(String args[]) {
/* Linked List Declaration */
LinkedList<String> linkedlist = new LinkedList<String>();
/*add(String Element) is used for adding
* the elements to the linked list*/
linkedlist.add("Item1");
linkedlist.add("Item5");
linkedlist.add("Item3");
linkedlist.add("Item6");
linkedlist.add("Item2");
/*Display Linked List Content*/
System.out.println("Linked List Content: " +linkedlist);
/*Add First and Last Element*/
linkedlist.addFirst("First Item");
linkedlist.addLast("Last Item");
System.out.println("LinkedList Content after addition: " +linkedlist);
/*This is how to get and set Values*/
Object firstvar = linkedlist.get(0);
System.out.println("First element: " +firstvar);
linkedlist.set(0, "Changed first item");
Object firstvar2 = linkedlist.get(0);
System.out.println("First element after update by set method: " +firstvar2);
/*Remove first and last element*/
linkedlist.removeFirst();
linkedlist.removeLast();
System.out.println("LinkedList after deletion of first and last element: " +linkedlist);
/* Add to a Position and remove from a position*/
linkedlist.add(0, "Newly added item");
linkedlist.remove(2);
System.out.println("Final Content: " +linkedlist);
}
}
```
输出:
```java
Linked List Content: [Item1, Item5, Item3, Item6, Item2]
LinkedList Content after addition: [First Item, Item1, Item5, Item3, Item6, Item2, Last Item]
First element: First Item
First element after update by set method: Changed first item
LinkedList after deletion of first and last element: [Item1, Item5, Item3, Item6, Item2]
Final Content: [Newly added item, Item1, Item3, Item6, Item2]
```
## `LinkedList`类的方法:
> 这里我已经提到了`LinkedList`方法的简要说明,我已经在单独的教程中介绍了这些方法中的每一个,本文末尾提供了链接。
对于以下方法中的所有示例,请将`llistobj`视为`LinkedList<String>`的参考。
`LinkedList<String> llistobj = new LinkedList<String>();`
1) `boolean add(Object item)`:它在列表的末尾添加项目。
```java
llistobj.add("Hello");
```
它会在链表的末尾添加字符串`"Hello"`。
2) `void add(int index, Object item)`:它在列表的给定索引处添加一个项目。
```java
llistobj.add(2, "bye");
```
这将在第 3 个位置添加字符串`"bye"`(索引 2 是第 3 个位置,因为索引从 0 开始)。
3) `boolean addAll(Collection c)`:它将指定集合`c`的所有元素添加到列表中。如果指定的集合为`null`,则抛出`NullPointerException`。考虑下面的例子 -
```java
LinkedList<String> llistobj = new LinkedList<String>();
ArrayList<String> arraylist= new ArrayList<String>();
arraylist.add("String1");
arraylist.add("String2");
llistobj.addAll(arraylist);
```
这段代码会将`ArrayList`的所有元素添加到`LinkedList`中。
4)`boolean addAll(int index, Collection c)`:它将集合`c`的所有元素从列表中的给定索引开始添加到列表中。如果集合`c`为`null`,则抛出`NullPointerException`;如果指定的索引超出范围,则抛出`IndexOutOfBoundsException`。
```java
llistobj.add(5, arraylist);
```
它会将`ArrayList`的所有元素从位置 6(索引 5)开始添加到`LinkedList`。
5)`void addFirst(Object item)`:它在列表的第一个位置添加项(或元素)。
```java
llistobj.addFirst("text");
```
它会在列表的开头添加字符串`"text"`。
6)`void addLast(Object item)`:它在列表的末尾插入指定的项目。
```java
llistobj.addLast("Chaitanya");
```
该语句将在链表的末尾添加一个字符串`"Chaitanya"`。
7) `void clear()`:删除列表中的所有元素。
```java
llistobj.clear();
```
8)`Object clone()`:返回列表的副本。
对于例如我的`linkedList`有四个项目:`text1`,`text2`,`text3`和`text4`。
```java
Object str= llistobj.clone();
System.out.println(str);
```
输出:上面代码的输出是:
```java
[text1,text2,text3,text4]
```
9) `boolean contains(Object item)`:它检查给定项是否存在于列表中。如果该项目存在,则返回`true`,否则返回`false`。
```java
boolean var = llistobj.contains("TestString");
```
它将检查列表中是否存在字符串`"TestString"`。
10) `Object get(int index)`:从列表中返回指定索引的项。
```java
Object var = llistobj.get(2);
```
它将从列表中获取第 3 个项目。
11) `Object getFirst()`:从列表中取出第一个项目。
```java
Object var = llistobj.getFirst();
```
12)`Object getLast()`:从列表中取出最后一项。
```java
Object var= llistobj.getLast();
```
13)`int indexOf(Object item)`:返回指定项的索引。
```java
llistobj.indexOf("bye");
```
14)`int lastIndexOf(Object item)`:返回指定元素最后一次出现的索引。
```java
int pos = llistobj.lastIndexOf("hello);
```
整数变量`pos`将具有最后一次出现的字符串`"hello"`的索引。
15)`Object poll()`:它返回并删除列表的第一项。
```java
Object o = llistobj.poll();
```
16)`Object pollFirst()`:与`poll()`方法相同。删除列表中的第一项。
```java
Object o = llistobj.pollFirst();
```
17)`Object pollLast()`:返回并删除列表的最后一个元素。
```java
Object o = llistobj.pollLast();
```
18)`Object remove()`:删除列表的第一个元素。
```java
llistobj.remove();
```
19)`Object remove(int index)`:它从列表中删除指定索引处的项目。
```java
llistobj.remove(4);
```
它将从列表中删除第 5 个元素。
20)`Object remove(Object obj)`:从列表中删除指定的对象。
```java
llistobj.remove("Test Item");
```
21)`Object removeFirst()`:它从列表中删除第一个项目。
```java
llistobj.removeFirst();
```
22)`Object removeLast()`:删除列表的最后一项。
```java
llistobj.removeLast();
```
23)`Object removeFirstOccurrence(Object item)`:删除指定项的第一次出现。
```java
llistobj.removeFirstOccurrence("text");
```
它将从列表中删除第一次出现的字符串`"text"`。
24)`Object removeLastOccurrence(Object item)`:删除给定元素的最后一次出现。
```java
llistobj.removeLastOccurrence("String1);
```
它将删除最后一次出现的字符串`"String1"`。
25)`Object set(int index, Object item)`:用赋值更新指定索引的项。
```java
llistobj.set(2, "Test");
```
它将使用字符串`"Test"`更新第 3 个元素。
26) `int size()`:返回列表元素的数量。
```java
llistobj.size();
```
## `LinkedList`教程
以下是我在`LinkedList`上分享的教程。
#### `LinkedList`基础知识
* [如何迭代`LinkedList`](https://beginnersbook.com/2013/12/how-to-loop-linkedlist-in-java/)
#### 添加/删除
* [向`LinkedList`添加元素](https://beginnersbook.com/2014/08/adding-an-element-to-linkedlist-using-adde-e-method-java/)
* [在`LinkedList`中的特定索引处添加元素](https://beginnersbook.com/2014/07/java-add-element-at-specific-index-in-linkedlist-example/)
* [在`LinkedList`的开头和结尾添加元素](https://beginnersbook.com/2014/07/java-add-elements-at-beginning-and-end-of-linkedlist-example/)
* [在`LinkedList`的前面添加一个元素](https://beginnersbook.com/2014/08/adding-element-to-front-of-linkedlist-in-java/)
* [从`LinkedList`中删除第一个和最后一个元素](https://beginnersbook.com/2014/07/java-remove-first-and-last-element-from-linkedlist-example/)
* [从特定索引中删除元素](https://beginnersbook.com/2014/07/java-remove-element-from-a-specific-index-in-linkedlist-example/)
* [从`LinkedList`中删除指定的元素](https://beginnersbook.com/2014/07/java-remove-specific-elements-from-linkedlist-example/)
* [从`LinkedList`中删除所有元素](https://beginnersbook.com/2014/07/java-remove-all-elements-from-linkedlist-example/)
* [将`List`的所有元素附加到`LinkedList`](https://beginnersbook.com/2014/08/append-all-the-elements-of-a-list-to-linkedlist-java/)
#### 获取/搜索
* [从`LinkedList`获取第一个和最后一个元素](https://beginnersbook.com/2014/07/java-get-first-and-last-elements-from-linkedlist-example/)
* [从`LinkedList`的特定索引中获取元素](https://beginnersbook.com/2014/07/java-get-element-from-specific-index-of-linkedlist-example/)
* [`LinkedList`中搜索元素](https://beginnersbook.com/2014/07/java-search-elements-in-linkedlist-example/)
* [获取`LinkedList`的子列表](https://beginnersbook.com/2014/07/java-get-sub-list-from-linkedlist-example/)
#### `Iterator`/`ListIterator`
* [`LinkedList Iterator`示例](https://beginnersbook.com/2014/07/java-linkedlist-iterator-example/)
* [`LinkedList ListIterator`示例](https://beginnersbook.com/2014/07/java-linkedlist-listiterator-example/)
* [以反向顺序迭代链表](https://beginnersbook.com/2014/08/iterate-a-linkedlist-in-reverse-sequential-order-java/)
#### 其他教程
* [用新值替换`LinkedList`中的元素](https://beginnersbook.com/2014/07/java-replace-element-in-a-linkedlist-example/)
* [检查`LinkedList`中是否存在特定元素](https://beginnersbook.com/2014/07/java-check-if-a-particular-element-exists-in-linkedlist-example/)
* [将`LinkedList`克隆到另一个`LinkedList`](https://beginnersbook.com/2014/08/clone-a-generic-linkedlist-in-java/)
* [获取`LinkedList`中元素的最后一次出现的索引](https://beginnersbook.com/2014/08/java-get-the-index-of-last-occurrence-of-an-element-in-linkedlist/)
* [`LinkedList push()`和`pop()`方法](https://beginnersbook.com/2014/08/linkedlist-push-and-pop-methods-java/)
* [`LinkedList poll()`,`pollFirst()`和 `pollLast()`方法](https://beginnersbook.com/2014/08/java-linkedlist-poll-pollfirst-and-polllast-methods/)
* [`LinkedList peek()`,`peekFirst()`和` peekLast()`方法](https://beginnersbook.com/2014/08/java-linkedlist-peek-peekfirst-and-peeklast-methods/)
#### 转换
* [将`LinkedList`转换为`ArrayList`](https://beginnersbook.com/2014/07/java-convert-a-linkedlist-to-arraylist/)
* [将`LinkedList`转换为数组](https://beginnersbook.com/2014/07/how-to-convert-linkedlist-to-array-using-toarray-in-java/)
#### 差异
* [`LinkedList` vs `ArrayList`](https://beginnersbook.com/2013/12/difference-between-arraylist-and-linkedlist-in-java/)
#### 参考
* [`LinkedList`文档](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html)
- BeginnersBook C 语言教程
- 首先学习 C 基础知识
- 如何安装 Turbo C++:编译并运行 C 程序
- C 程序结构 - 第一个 C 程序
- C 关键词 - 保留字
- C 中的决策控制语句
- C 编程中的if语句
- C - if..else,嵌套if..else 和 else..if语句
- C 编程的switch-case语句
- C 中的循环
- C 编程中for的循环
- C 编程中的while循环
- C 编程的do-while循环
- C - 循环控制语句
- C 编程中的break语句
- C - continue语句
- C - goto语句
- C 中的数组教程
- C 编程中的数组
- C 编程中的二维(2D)数组
- C 编程中的指针和数组
- 在 C 编程中将数组传递给函数
- C - 字符串
- C - 字符串和字符串函数
- C 中的函数
- C 编程中的函数
- C 编程中的按值函数调用
- C 编程中的按引用函数调用
- 结构体
- C 编程中的结构
- C 编程中的指针
- C 编程中的指针
- C - 指向指针的指针(双重指针)
- C - 函数指针
- 将指针传递给 C 中的函数
- 文件 I/O
- 在 C 编程中进行文件 I/O
- 运算符优先级表
- C 编程语言中的运算符优先级和关联性
- C 示例
- 带输出的 C 编程示例
- C 库函数教程
- C strcat()函数
- C strncat()函数
- C strchr()函数
- C strcmp()函数
- C strncmp()函数
- C strcoll()函数
- C strcpy()函数
- C strncpy()函数
- C strrchr()函数
- C strspn()函数
- C strstr()函数
- C strcspn()函数
- C strlen()函数
- BeginnersBook C 语言示例
- 简单的 C 程序
- C 语言中的 Hello World 程序
- C 程序:检查给定的整数是正还是负
- C 程序:使用递归函数反转给定的数字
- C 程序:查找最大的三个数字
- C 程序:显示 Fibonacci 序列
- C 程序:使用递归查找数字的阶乘
- C 程序:查找给定范围内的素数
- C 程序:检查阿姆斯特朗数
- C 程序:检查数字是否为回文数
- C 程序:查找给定范围内的回文数
- C 程序:检查数字是偶数还是奇数
- C 程序:查找字符的 ASCII 值
- C 程序:查找int,float,double和char的大小
- C 程序:检查字母是元音还是辅音
- CC 程序:检查闰年
- C 程序:查找前 n 个自然数的和
- 字符串程序
- C 程序:将大写字符串转换为小写字符串
- C 程序:将小写字符串转换为大写字符串
- C 程序:按字母顺序对字符串集进行排序
- C 程序:在不使用函数strlen()的情况下查找字符串的长度
- C 程序:在不使用strcat的情况下连接两个字符串
- C 程序:使用递归来反转字符串
- 数组程序
- C 程序:按升序排列数字
- C 程序:查找数组的最大元素
- C 程序:使用指针,递归和函数来查找数组元素的总和
- C 程序:查找数组中的元素数
- 排序程序
- C 冒泡排序程序
- C 中的插入排序程序
- C 中的选择排序程序
- C 中的快速排序程序
- C 指针程序
- C 程序:使用指针查找最大的三个数字
- C 程序:使用指针计算字符串中的元音和辅音
- C 程序:使用指针打印字符串
- C 程序:使用指针交换两个数字
- C 程序:创建,初始化和访问指针变量
- 计算程序
- C 程序:计算并打印 nPr 的值
- C 程序:计算并打印 nCr 的值
- C 程序:两个浮点数相乘
- C 程序:查找商和余数
- C 程序查找两个数字的平均值
- 数字系统转换程序
- C 程序:将二进制数转换为十进制数
- C 程序:将十进制数转换为二进制数
- C 程序:将十进制数转换为八进制数
- C 程序:将八进制数转换为十进制数
- C 程序:将二进制数转换为八进制数
- C 程序:将八进制数转换为二进制数
- 查找几何图形区域的程序
- C 程序:计算圆的面积和周长
- C 程序:计算等边三角形的面积
- BeginnersBook C++ 教程
- 基础
- Hello World - 第一个 C++ 程序
- C++ 中的变量
- C++ 中的数据类型
- C++ 中的运算符
- 控制语句
- C++ 中的if语句
- C++ 中的switch-case语句
- C++ 中的for循环
- C++ 中的while循环
- C++ 中的do-while循环
- C++ 中的continue语句
- C++ 中的break语句
- C++ 中的goto语句
- 函数
- C++ 中的函数
- C++ 函数中的默认参数
- C++ 递归
- 数组
- C++ 中的数组
- C++ 中的多维数组
- 在 C++ 中将数组传递给函数
- C++ 中的字符串
- 指针
- C++ 中的指针
- C++ this指针
- OOP
- C++ 中的 OOP 概念
- C++ 中的构造函数
- C++ 中的析构函数
- C++ 中的结构
- C++ 中的结构和函数
- C++ 中的枚举
- C++ 中的继承
- C++ 中的多态
- C++ 中的函数重载
- C++ 函数覆盖
- C++ 中的虚函数:运行时多态
- C++ 封装
- C++ 中的抽象
- C++ 中的接口:抽象类
- 从 C++ 中的函数传递和返回对象
- C++ 中的友元类和友元函数
- BeginnersBook 数据库教程
- DBMS 简介
- 数据库应用 - DBMS
- DBMS 优于文件系统的优点
- DBMS 架构
- DBMS - 三层架构
- DBMS 中的数据视图
- DBMS 中的数据抽象
- DBMS 中的实例和模式
- DBMS 中的数据模型
- 实体关系图 - DBMS 中的 ER 图
- DBMS 泛化
- DBMS 特化
- DBMS 聚合
- DBMS 中的关系模型
- RDBMS 概念
- DBMS 中的分层模型
- DBMS 语言
- DBMS 关系代数
- DBMS 关系演算
- DBMS 中的键
- DBMS 中的主键
- DBMS 中的超键
- DBMS 中的候选键
- DBMS 中的替代键
- DBMS 中的复合键
- DBMS 中的外键
- DBMS 中的约束
- DBMS 中的域约束
- DBMS 中的映射约束
- DBMS 中的基数
- DBMS 中的函数依赖
- DBMS 中的平凡函数依赖
- DBMS 中的非平凡函数依赖
- DBMS 中的多值依赖
- DBMS 中的传递依赖
- DBMS 中的范式:数据库中的 1NF,2NF,3NF 和 BCNF
- DBMS 中的事务管理
- DBMS 中的 ACID 属性
- DBMS 事务状态
- DBMS 调度和调度类型
- DBMS 可串行化
- DBMS 冲突可串行化
- DBMS 查看可串行化
- DBMS 中的死锁
- DBMS 中的并发控制
- BeginnersBook Java 教程
- Java 基础知识教程
- Java 编程简介
- Java 虚拟机(JVM),JDK 差异,JRE 和 JVM - 核心 Java
- 如何编译和运行您的第一个 Java 程序
- Java 中的变量
- Java 中的数据类型
- Java 中的运算符
- Java 中的if和if-else语句
- Java 中的switch-case语句
- Java 中的for循环
- Java 中的while循环
- Java 中的 do-while 循环示例
- Java continue语句
- Java 中的break语句
- Java OOP 教程
- Java 中的构造函数 - 一个完整的研究
- Java - 静态类,块,方法和变量
- Java 编程中的继承
- Java 中的继承类型:单一,多重,多级和混合
- OOP 概念 - 什么是 java 中的聚合?
- OOP 概念 - java 中的关联是什么?
- java 中的super关键字
- Java 中的方法重载
- java 中的方法覆盖
- java 中方法重载和覆盖之间的区别
- Java 中的多态
- java 的多态类型 - 运行时和编译时多态
- java 中的静态和动态绑定
- Java 中的抽象类
- Java 中的抽象方法
- java 中的接口
- Java 中抽象类和接口的区别
- Java 中的封装
- java 中的包以及如何使用它们
- Java 访问修饰符 - 公共、私有、受保护和默认
- Java 中的垃圾收集
- Java 中的final关键字 - final变量,方法和类
- Java 异常处理教程
- java 中的异常处理
- Java 中的try-catch - 异常处理
- Java finally块 - 异常处理
- 如何在 java 中抛出异常
- java 中的用户定义的异常
- Java 异常处理
- Java 注解,枚举和正则表达式教程
- Java 枚举教程
- Java 注解教程
- Java 正则表达式教程
- 其它核心 Java 教程
- Java - String类及其方法
- java 多线程
- Java 序列化
- Java AWT 初学者教程
- 适合初学者的 Java Swing 教程
- Java 自动装箱和拆箱
- Java 中的包装类
- Java 8 教程
- Java Lambda 表达式教程
- Java 8 中的方法引用
- Java 函数式接口
- Java 8 流教程
- Java 8 流过滤器
- Java 8 接口更改 - 默认方法和静态方法
- Java 8 forEach方法
- Java 8 - Stream Collectors类
- Java 8 StringJoiner
- Java 8 Optional类
- Java 8 - 数组并行排序
- Java 9 特性
- Java 9 JShell(Java Shell) - REPL
- Java 9 - 创建不可变List的工厂方法
- Java 9 - 创建不可变Set的工厂方法
- Java 9 - 用于创建不可变Map的工厂方法
- Java 9 - 接口中的私有方法
- Java 9 - try-with-resource改进
- Java 9 - 匿名内部类和菱形运算符
- Java 9 - @SafeVarargs注解
- Java 9 - 流 API 改进
- 在 15 分钟内学习 Java 9 模块
- BeginnersBook Java 集合教程
- Java 集合 - List
- ArrayList
- ArrayList基础知识
- java 中的ArrayList - 集合框架
- 如何初始化ArrayList
- 如何在 Java 中遍历ArrayList
- 如何在 Java 中查找ArrayList的长度
- ArrayList排序
- 如何在 Java 中对ArrayList进行排序
- 如何在 Java 中按降序对ArrayList进行排序
- Java ArrayList对象排序(Comparable和Comparator)
- ArrayList添加/删除
- Java ArrayList add()方法
- Java ArrayList add(int index, E element)
- Java ArrayList addAll(Collection c)方法
- 如何在 Java 中将所有List元素复制并添加到ArrayList
- Java ArrayList addAll(int index, Collection c)方法
- Java ArrayList remove(int index)方法
- Java ArrayList remove(Object obj)方法
- 在ArrayList中获取/搜索
- 如何获取ArrayList的子列表
- JavaArrayList lastIndexOf(Object Obj)方法
- Java ArrayList get()方法
- Java ArrayList indexOf()方法
- Java ArrayList contains()方法
- 关于ArrayList的其他教程
- 如何在 Java 中比较两个ArrayList
- 如何在 java 中同步ArrayList
- 如何交换ArrayList中的两个元素
- 如何在 Java 中覆盖ArrayList的toString方法
- 如何在 java 中序列化ArrayList
- 如何在 java 中连接/组合两个ArrayList
- 如何将ArrayList克隆到另一个ArrayList
- 如何在 Java 中清空ArrayList
- Java ArrayList isEmpty()方法
- Java ArrayList trimToSize()方法
- Java ArrayList set()方法示例
- Java ArrayList ensureCapacity()方法
- ArrayList转换
- 如何在 java 中将ArrayList转换为字符串数组
- 如何在 java 中将数组转换为ArrayList
- 差异
- java 中ArrayList和Vector之间的区别
- Java 中ArrayList和HashMap的区别
- Java 中ArrayList和LinkedList的区别
- 链表
- LinkedList基础知识
- Java 中的LinkedList
- 如何在 Java 中遍历LinkedList
- LinkedList添加/删除
- 使用add(E e)方法向LinkedList添加元素
- Java - 在LinkedList的特定索引处添加元素
- Java - 在LinkedList的开头和结尾添加元素
- 在 Java 中将LinkedList添加到LinkedList的前面
- Java - 从LinkedList删除第一个和最后一个元素
- Java - 从LinkedList的特定索引删除元素
- Java - 从LinkedList删除特定元素
- Java - 从LinkedList删除所有元素
- 将List的所有元素附加到LinkedList
- 在链表中获取/搜索
- Java - 从LinkedList获取第一个和最后一个元素
- Java - 从LinkedList的特定索引获取元素
- Java - 在LinkedList中搜索元素
- Java - 从LinkedList获取子列表
- LinkedList Iterator / ListIterator
- Java - LinkedList Iterator
- Java - LinkedList ListIterator
- 以反向顺序迭代LinkedList
- LinkedList上的其他教程
- Java - 替换LinkedList中的元素
- Java - 检查LinkedList中是否存在特定元素
- 在 Java 中克隆一个通用的LinkedList
- Java - 获取LinkedList中元素的最后一次出现的索引
- LinkedList push()和pop()方法
- Java - LinkedList poll(),pollFirst()和pollLast()方法
- Java - LinkedList peek(),peekFirst()和peekLast()方法
- 转换
- Java - 将LinkedList转换为ArrayList
- 如何使用 Java 中的toArray()将LinkedList转换为数组
- Vector
- Vector基础知识
- Java 中的Vector
- 如何在 java 中获取Vector的子列表
- 如何使用 Java 中的Collections.sort对Vector进行排序
- 使用索引在 Java 中搜索元素
- 将一个Vector的所有元素复制到另一个Vector
- Vector中的删除/排序/替换
- 删除Vector元素
- 如何在 java 中使用索引删除Vector元素
- 从 Java 中的Vector中删除所有元素
- 使用索引替换Vector元素
- 如何设置Vector大小
- Iterator/ListIterator/Enum
- Java 中的Vector Enumeration
- Java 中的Vector迭代器
- Java 中的Vector ListIterator
- 转换
- Java - 将Vector转换为List
- Java - 将Vector转换为ArrayList
- 如何在 java 中将Vector转换为字符串数组
- Java 集合 - Set
- HashSet
- Java 中的HashSet类
- 从HashSet中删除所有元素
- 如何迭代Set/HashSet
- 将HashSet转换为数组
- 如何将HashSet转换为TreeSet
- 将HashSet转换为List / ArrayList
- HashSet和HashMap之间的区别
- LinkedHashSet
- Java 中的LinkedHashSet类
- Java 中List和Set之间的区别
- TreeSet
- Java 中的TreeSet类
- HashSet和TreeSet之间的区别
- Java 集合 - Map
- HashMap
- HashMap基础知识
- Java 中的HashMap
- 如何在 java 中循环HashMap
- 如何按键和值对 Java 中的HashMap进行排序
- Java - 获取HashMap的大小
- Java - 从HashMap中删除映射
- Java - 从HashMap中删除所有映射
- 如何检查HashMap是否为空?
- 在HashMap中获取/搜索
- Java - 检查HashMap中是否存在特定键
- Java - 检查HashMap中是否存在特定值
- 序列化/同步
- 如何在 java 中序列化HashMap
- 如何在 Java 中同步HashMap
- 差异
- HashMap和Hashtable之间的区别
- HashSet和HashMap之间的区别
- 关于HashMap的其他教程
- Java - HashMap Iterator
- 何将一个hashmap内容复制到另一个hashmap
- HashMap - 从键中获取值
- Java - 从HashMap获取键集视图
- 用 Java 克隆HashMap
- TreeMap
- Java 中的TreeMap
- TreeMap Iterator示例 - Java
- 如何在 java 中按值对TreeMap进行排序
- 如何在 Java 中以相反的顺序迭代TreeMap
- 如何从TreeMap中获取子映射 - Java
- LinkedHashMap
- Java 中的LinkedHashMap
- HashTable
- java 中的Hashtable
- Java 集合 - Iterator/ListIterator
- Java Iterator
- Java 中的ListIterator
- Comparable和Comparator接口
- Java 中的Comparable接口
- Java 中的Comparator接口
- 集合面试问题
- Java 集合面试问题和解答
- BeginnersBook Java 示例
- Java 基础程序
- Java 程序:相加两个数字
- Java 程序:检查偶数或奇数
- Java 程序:相加两个二进制数
- Java 程序:相加两个复数
- Java 程序:乘以两个数字
- Java 程序:检查闰年
- Java 程序:使用Switch Case检查元音或辅音
- Java 程序:计算复合利率
- Java 程序:计算简单利率
- Java 程序:查找商和余数
- Java 字符串程序
- 如何在 Java 中将字符串转换为char
- Java 程序:在String中查找重复的字符
- java 程序:使用Stack,Queue,for或while循环检查回文串
- Java 程序:按字母顺序排序字符串
- Java 程序:反转String中的单词
- Java 程序:对字符串执行冒泡排序
- Java 程序:查找字符串中字符的出现
- Java 程序:计算字符串中的元音和辅音
- Java 数组程序
- Java 程序:使用数组计算平均值
- Java 程序:汇总数组的元素
- Java 程序:反转数组
- Java 程序:按升序排序数组
- 如何在 Java 中将char数组转换为字符串?
- Java 递归程序
- Java 程序:使用for,while和递归来反转一个数字
- java 程序:使用递归检查回文字符串
- Java 程序:使用递归来反转字符串
- java 程序:使用递归查找给定数字的阶乘
- Java 数字程序
- Java 程序:显示前n个或前 100 个素数
- Java 程序:显示 1 到 100 和 1 到n的素数
- Java 程序:将Integer分解为数字
- Java 程序:检查素数
- Java 程序:检查给定数字是否为完美平方
- Java 程序:不使用sqrt查找数字的平方根
- Java 程序:在给定范围之间打印 Armstrong 数字
- Java 程序:查找自然数之和
- Java 程序:用于检查数字是正还是负
- Java 程序:生成随机数
- Java 程序:检查 Armstrong 数
- Java 程序:查找两个数字的 GCD
- Java 程序:找到三个数字中最大的一个
- Java 程序:使用按位 XOR 运算符交换两个数字
- Java 程序:使用三元运算符查找最小的三个数字
- Java 程序:使用三元运算符查找三个数字中的最大数字
- Java 程序:打印备用素数
- Java 程序:打印 1 到n或 1 到 100 的偶数
- Java 程序:打印 1 到n或 1 到 100 的奇数
- Java 输入/输出程序
- Java 程序:从标准输入读取整数值
- Java 程序:获取 IP 地址
- Java 程序:从用户获取输入
- Java 程序:几何计算
- Java 程序:计算矩形面积
- Java 程序:计算正方形的面积
- Java 程序:计算三角面积
- Java 程序:计算圆的面积和周长
- Java 排序/搜索程序
- Java 程序:升序和降序的冒泡排序
- Java 程序:线性搜索
- Java 程序:执行二分搜索
- Java 程序:选择排序
- Java 转换程序
- Java 程序:八进制到十进制的转换
- Java 程序:十进制到八进制的转换
- Java 程序:十六进制到十进制的转换
- Java 程序:十进制到十六进制的转换
- Java 程序:二进制到八进制的转换
- Java 程序:String到boolean的转换
- Java 程序:布尔值到String的转换
- Java 程序:int到char的转换
- Java 程序:char到int的转换
- Java 程序:char到String的转换
- Java 程序:long到int的转换
- Java 程序:int到long的转换
- Java 程序:十进制到二进制的转换
- Java 程序:二进制到十进制的转换
- Java 程序:查找字符的 ASCII 值
- Java 程序:String到int的转换
- Java 程序:int到String的转换
- Java 程序:String到double的转换
- Java 程序:double到字符串的转换
- Java 程序:字符串到long的转换
- Java 程序:long到字符串的转换
- 其他 Java 程序
- Java 程序:打印 Floyd 三角形
- Java 程序:打印 Pascal 三角形
- Java 程序:使用循环显示 Fibonacci 序列
- Java 程序:使用For和While循环查找阶乘
- Java 程序:使用Switch Case制作计算器
- Java 程序:计算和显示学生成绩
- Java 程序:使用方法重载执行算术运算
- Java 程序:使用方法重载查找几何图形的面积
- BeginnersBook Java IO 教程
- 如何在 Java 中创建文件
- 如何在 Java 中读取文件 - BufferedInputStream
- 如何在 java 中使用FileOutputStream写入文件
- 使用BufferedWriter,PrintWriter,FileWriter附加到 java 中的文件
- 如何在 Java 中删除文件 - delete()方法
- 如何以 GZIP 格式压缩文件
- 如何使用 Java 将文件复制到另一个文件
- 如何在 java 中获取文件的最后修改日期
- 如何在 Java 中创建只读文件
- 如何在 Java 中检查文件是否隐藏
- BeginnersBook Java 字符串教程
- Java 字符串方法
- Java String charAt()方法
- Java Stringequals()和equalsIgnoreCase()方法
- Java String compareTo()方法
- Java String compareToIgnoreCase()方法
- Java String startsWith()方法
- Java String endsWith()方法
- Java String trim()和hashCode()方法
- Java String indexOf()方法
- Java String lastIndexOf()方法
- Java - String substring()方法
- Java String concat()方法
- Java String replace(),replaceFirst()和replaceAll()方法
- Java String contains()方法
- Java - String toLowerCase()和toUpperCase()方法
- Java String intern()方法
- Java String isEmpty()方法
- Java String join()方法
- Java 正则表达式教程
- Java String split()方法
- Java String format()方法
- Java - String toCharArray()方法
- Java - String copyValueOf()方法
- Java - String getChars()方法
- Java String valueOf()方法
- Java - String contentEquals()方法
- Java - String regionMatches()方法
- Java - String getBytes()方法
- Java String length()方法
- Java - String matches()方法
- 流行的 Java 字符串教程
- Java 程序:String到int的转换
- Java 程序:int到String的转换
- Java 程序:String到double的转换
- Java 程序:double到字符串的转换
- Java 程序:字符串到long的转换
- Java 程序:long到字符串的转换
- 如何在 Java 中将InputStream转换为字符串
- String和StringBuffer之间的区别
- Java 程序:String到boolean的转换
- Java 程序:布尔值到String的转换
- 在 Java 中将String对象转换为Boolean对象
- 如何在 Java 中仅删除字符串的尾随空格
- java - 使用空格和零左填充字符串
- java - 使用空格和零右填充字符串
- Java 程序:在String中查找重复的字符
- 如何在 Java 中将字符串转换为字符
- 如何在 Java 中将char数组转换为字符串?
- 在 Java 中将String转换为日期
- 在 Java 中将Date转换为String
- Java - ASCII 到String的转换
- Java - float到String的转换
- Java - StackTrace到String的转换
- Java - Writer到String的转换
- Java - String到ArrayList转换
- Java 8 StringJoiner
- Java 程序:反转String中的单词
- Java 程序:使用递归来反转字符串
- BeginnersBook JSP 教程
- 概述
- Java 服务器页面简介
- Java 服务器页面(JSP)生命周期
- 指令
- JSP 指令 - page,include和TagLib
- JSP 中的Include指令
- JSP 带参数的include指令
- Scriptlets
- JSP Scriptlets
- 动作标签
- JSP 动作
- JSP include动作标签
- JSP 带参数的include动作
- JSP forward动作标签
- jsp:useBean,jsp:setProperty和jsp:getProperty动作标签
- 表达式
- JSP 表达式标签
- 声明
- JSP 声明标签 - JSP 教程
- JSP 隐式对象
- Jsp 隐式对象
- JSP 中的out隐式对象
- JSP 中的request隐式对象
- JSP 中的response隐式对象
- JSP 中的Session隐式对象
- JSP 中的application隐式对象
- JSP 中的exception隐式对象
- JSP 中的pageContext隐式对象
- JSP 中的config隐式对象
- JSP 中的表达式语言(EL)
- JSP 表达式语言(EL)
- 异常处理
- JSP 中的异常处理
- 自定义标签
- JSP 自定义标签
- 如何访问自定义标签的主体
- BeginnersBook JSTL 教程
- JSTL 核心标签
- JSTL<c:out>核心标签
- JSTL<c:set>核心标签
- JSTL<c:delete>核心标签
- JSTL<c:if>核心标签
- JSTL<c:choose>,<c:when>,<c:otherwise>核心标签
- JSTL<c:catch>核心标签
- JSTL<c:import>核心标签
- JSTL<c:forEach>和<c:forTokens>核心标签
- JSTL<c:param>核心标签
- JSTL<c:url>核心标签
- JSTL<c:redirect>核心标签
- JSTL 函数
- fn:contains() - JSTL 函数
- fn:containsIgnoreCase() - JSTL 函数
- fn:indexOf() - JSTL 函数
- fn:escapeXml() - JSTL 函数
- fn:join()和fn:split()JSTL 函数
- fn:length() - JSTL 函数
- fn:trim()和fn:startsWith()JSTL 函数
- fn:endsWith() - JSTL 函数
- fn:substring(),fn:substringAfter()和fn:substringBefore()函数
- fn:toUpperCase() - JSTL 函数
- fn:toLowerCase() - JSTL 函数
- fn:replace() - JSTL 函数
- BeginnersBook Kotlin 教程
- BeginnersBook MongoDB 教程
- NoSQL 数据库简介
- MongoDB 简介
- 将关系数据库映射到 MongoDB
- 如何为 Windows 安装和配置 MongoDB
- 在 MongoDB 中创建数据库
- 删除 MongoDB 中的数据库
- 在 MongoDB 中创建集合
- 删除 MongoDB 中的集合
- MongoDB 插入文档
- MongoDB 使用find()方法查询文档
- MongoDB - 更新集合中的文档
- MongoDB 从集合中删除文档
- MongoDB 投影
- MongoDB - limit()和skip()方法
- MongoDB sort()方法
- MongoDB 索引教程
- BeginnersBook Perl 教程
- 在 Windows,Mac,Linux 和 Unix 上安装 Perl
- 第一个 Perl 计划
- Perl 语法
- Perl 中的数据类型
- Perl 变量
- my关键字 - Perl 中的本地和全局变量
- Perl 中的标量
- Perl 中的use strict和use warnings
- Perl - 列表和数组
- Perl 中的哈希
- Perl 运算符 - 完整指南
- Perl 中的条件语句
- Perl 中的if语句
- Perl 中的if-else语句
- perl 中的if-elsif-else语句
- Perl 中的unless语句
- Perl 中的unless-else语句
- Perl 中的unless-elsif语句
- Perl 中的Switch Case
- Perl 中的given-when-default语句
- Perl 中的循环和循环控制语句
- Perl 中的for循环
- Perl while循环
- Perl - do-while循环
- Perl - foreach循环
- Perl 中的until循环
- Perl 中的子程序
- Perl - 字符串
- Perl 字符串转义序列
- BeginnersBook Servlet 教程
- 适用于初学者的 Servlet 教程
- Servlet API
- Servlet接口解释
- GenericServlet类
- HttpServlet类
- 如何在 Eclipse IDE 中创建和运行 Servlet
- Servlet 生命周期
- Servlet 的工作原理
- 项目的web.xml文件中的welcome-file-list标签
- 如何在web.xml文件中使用load-on-startup标签
- ServletRequest接口
- Servlet 中的RequestDispatcher方法
- ServletConfig接口
- ServletContext接口
- ServletResponse接口
- Servlet 中的HttpSession
- Servlet 中的Cookie
- Servlet 面试问答