目录
3.Java 中 Stack 和 HashSet 的使用及特性
1.Java LinkedList 的高级应用与示例
1.1 LinkedList的基本使用
目的:深入了解
LinkedList
类的基本用法。特点:
LinkedList
是一个双向链表,提供了多种方法来操作列表元素。
基本操作示例
LinkedList<String> list = new LinkedList<>();
list.add("小希"); // 添加元素
list.add(5, "小翔"); // 添加元素到指定位置
list.set(2, "小君"); // 设置指定位置的元素
String string = list.get(2); // 获取指定位置的元素
int size = list.size(); // 获取集合大小
1.2 LinkedList独有的方法
特点:提供了一系列操作首尾元素的方法。
方法:
addFirst
,offerFirst
,push
:在列表首部添加元素。addLast
,offerLast
,offer
:在列表尾部添加元素。getFirst
,getLast
,peekFirst
,peekLast
:获取首尾元素。removeFirst
,removeLast
,pollFirst
,pollLast
:删除首尾元素。
特定方法示例
LinkedList<String> list = new LinkedList<>();
list.addFirst("aaa"); // 添加到第一个位置
list.addLast("xxx"); // 添加到最后一个位置
String firstElement = list.getFirst(); // 获取第一个元素
list.removeFirstOccurrence("元素"); // 删除第一次出现的指定元素
1.3 队列模式(先进先出)
作用:利用
LinkedList
实现队列功能。操作:
使用
add
方法添加元素。使用
removeFirst
方法移除并返回队列的头部元素。
队列模式示例
LinkedList<String> queue = new LinkedList<>();
queue.add("aaa"); // 入队
String head = queue.removeFirst(); // 出队
1.4 栈模式(先进后出)
作用:利用
LinkedList
实现栈功能。操作:
使用
push
方法添加元素到栈顶。使用
pop
方法移除并返回栈顶元素。
栈模式示例
LinkedList<String> stack = new LinkedList<>();
stack.push("aaa"); // 入栈
String top = stack.pop(); // 出栈
总结
LinkedList
在 Java 集合框架中是一个非常灵活的类,不仅可以作为列表使用,还可以轻松地作为队列或栈实现。其独特的双向链表结构提供了高效的元素插入和删除操作。通过合理利用 LinkedList
的这些特性,可以在多种场景下实现高效的数据操作。
2.Java Vector 类的使用和特性
2.1 Vector的使用
目的:探索
Vector
类的基本操作和使用。特点:
Vector
是一个同步的动态数组,提供线程安全的集合操作。
基本操作示例
Vector<String> list = new Vector<>();
list.add("小希"); // 添加元素
list.add(5, "小翔"); // 添加元素到指定位置
list.set(2, "小君"); // 设置指定位置的元素
String string = list.get(2); // 获取指定位置的元素
int size = list.size(); // 获取集合大小
批量操作:使用
addAll
和Collections.addAll
进行集合的批量添加。检查和删除:使用
contains
,remove
,removeAll
等方法进行元素检查和删除。子集和数组转换:
subList
获取子集,toArray
转换为数组。遍历方法:支持
for
循环,foreach
循环,Iterator
和ListIterator
遍历。
2.2 Vector的发展历史
历史背景:
Vector
类自 JDK 1.0 就存在,比集合框架更早。集合框架引入:JDK 1.2 引入了集合框架,
Vector
被整合进List
接口。向后兼容:为了兼容旧代码,Java 保留了
Vector
。
旧方法示例
Vector<String> v = new Vector<>();
v.addElement("aaa"); // 添加元素
v.removeElement("bbb"); // 删除元素
Enumeration<String> elements = v.elements(); // 遍历集合
while(elements.hasMoreElements()){
String element = elements.nextElement();
System.out.println(element);
}
同步特性:
Vector
的所有操作都是线程安全的,但这也导致性能稍低于ArrayList
。替代方案:在非多线程环境下,通常推荐使用
ArrayList
代替Vector
。
总结
Vector
是 Java 早期集合类之一,提供线程安全的动态数组实现。尽管在现代 Java 应用中,ArrayList
更为常用,Vector
仍然在一些特定场景下(如线程安全需求较高的环境)有其应用价值。了解 Vector
的历史和特性有助于更好地理解 Java 集合框架的发展及其各类集合的适用场景。
3.Java 中 Stack 和 HashSet 的使用及特性
3.1Stack 的使用
知识点:Stack 类的基本使用,栈模式(先进后出)。
继承关系:Stack 继承自 Vector 类。
基本操作:
push
:将元素压入栈顶。pop
:移除并返回栈顶元素。peek
:仅返回栈顶元素,不删除。empty
:检查栈是否为空。search
:查找元素在栈中的位置。
示例代码
Stack<String> stack = new Stack<>();
stack.push("aaa");
String pop = stack.pop(); // 移除并返回栈顶元素
String peek = stack.peek(); // 返回栈顶元素
boolean isEmpty = stack.empty(); // 检查栈是否为空
int position = stack.search("bbb"); // 查找元素位置
3.2 HashSet 的使用
3.2.1 HashSet的基本使用
目的:展示 HashSet 的基本操作。
特点:HashSet 是基于 HashMap 实现的,提供了快速的插入、搜索和删除操作。
基本操作:
add
:添加元素。remove
:删除元素。contains
:检查是否包含某个值。isEmpty
:检查集合是否为空。size
:获取集合的大小。toArray
:将集合转换为数组。
示例代码
HashSet<String> set = new HashSet<>();
set.add("小希");
set.remove("小光");
boolean contains = set.contains("小希");
boolean isEmpty = set.isEmpty();
int size = set.size();
Object[] array = set.toArray();
3.2.2 HashSet的特点
特点:HashSet 具有唯一性(无重复元素)和无序性。
实现原理:通过哈希表(实际上是 HashMap 的实例)实现。
用途:适用于需要快速查找且不允许重复元素的场景。
示例代码
HashSet<String> set = new HashSet<>();
set.add("aaa");
set.add("bbb");
set.add("ccc"); // 添加元素
set.add("ddd");
set.add("Aa");
set.add("BB");
总结
Stack:提供了典型的栈操作,适用于需要先进后出(LIFO)数据结构的场景。
HashSet:提供了高效的元素存储和访问,适用于需要快速访问且元素唯一的场景,但不保证元素的顺序。