嘿,Java新手们!今天咱们来深入探索Java里的集合框架,学习一些高级用法,让你的代码更强大、更高效呢。集合框架就像是一个神奇的工具箱,里面有很多有用的工具,咱们来一起看看吧!
## 一、集合框架的回顾:工具箱里的基础工具
先来回顾一下集合框架的基础内容吧。集合框架主要有三大接口:`List`、`Set`、`Map`,以及它们的各种实现类,比如`ArrayList`、`LinkedList`、`HashSet`、`LinkedHashSet`、`HashMap`、`LinkedHashMap`等。这些集合类提供了丰富的方法来管理数据,比如添加、删除、查找等。
```java
// List示例
List
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// Set示例
Set
set.add("Apple");
set.add("Banana");
set.add("Cherry");
// Map示例
Map
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
```
二、高级集合类:工具箱里的高级工具
除了基础的集合类,Java还提供了一些高级集合类,这些类提供了更多的功能和更好的性能。
1.`LinkedList`:双向链表
`LinkedList`是一个双向链表实现的`List`接口,它在插入和删除元素时效率更高,但在随机访问元素时效率较低。
```java
// LinkedList示例
LinkedList
linkedList.add("Apple");
linkedList.add("Banana");
linkedList.add("Cherry");
// 在头部插入元素
linkedList.addFirst("Durian");
// 在尾部插入元素
linkedList.addLast("Elderberry");
// 删除头部元素
linkedList.removeFirst();
// 删除尾部元素
linkedList.removeLast();
```
2.`LinkedHashSet`:有序的Set
`LinkedHashSet`是一个有序的`Set`实现,它保持了元素的插入顺序。
```java
// LinkedHashSet示例
Set
linkedHashSet.add("Apple");
linkedHashSet.add("Banana");
linkedHashSet.add("Cherry");
// 遍历LinkedHashSet,保持插入顺序
for (String fruit : linkedHashSet) {
System.out.println(fruit);
}
```
3.`LinkedHashMap`:有序的Map
`LinkedHashMap`是一个有序的`Map`实现,它保持了键值对的插入顺序。
```java
// LinkedHashMap示例
Map
linkedHashMap.put("Apple", 1);
linkedHashMap.put("Banana", 2);
linkedHashMap.put("Cherry", 3);
// 遍历LinkedHashMap,保持插入顺序
for (Map.Entry
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
三、集合的遍历:高效地使用工具
遍历集合是常见的操作,Java提供了多种遍历集合的方法,咱们来看看几种高效的方法。
1.增强型for循环(foreach循环)
增强型for循环是最简单的遍历集合的方法,适用于所有实现了`Iterable`接口的集合。
```java
// 使用foreach循环遍历List
for (String fruit : list) {
System.out.println(fruit);
}
// 使用foreach循环遍历Set
for (String fruit : set) {
System.out.println(fruit);
}
// 使用foreach循环遍历Map的键
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
// 使用foreach循环遍历Map的值
for (Integer value : map.values()) {
System.out.println(value);
}
// 使用foreach循环遍历Map的键值对
for (Map.Entry
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
2.迭代器(Iterator)
迭代器是一个用于遍历集合的接口,它提供了`hasNext()`和`next()`方法来遍历集合。迭代器还可以在遍历过程中删除元素。
```java
// 使用迭代器遍历List
Iterator
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
if (fruit.equals("Banana")) {
iterator.remove(); // 删除元素
}
}
// 使用迭代器遍历Set
Iterator
while (setIterator.hasNext()) {
String fruit = setIterator.next();
System.out.println(fruit);
}
// 使用迭代器遍历Map的键值对
Iterator
while (mapIterator.hasNext()) {
Map.Entry
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
四、集合的转换:工具之间的转换
有时候,我们需要在不同的集合之间进行转换,Java提供了多种方法来实现集合的转换。
1.List转Set
将`List`转换为`Set`可以去除重复元素。
```java
// List转Set
List
Set
System.out.println(set); // 输出: [Apple, Banana, Cherry]
```
2.Set转List
将`Set`转换为`List`可以方便地进行索引访问。
```java
// Set转List
Set
List
System.out.println(list); // 输出: [Apple, Banana, Cherry]
```
3.Map转List
将`Map`的键值对转换为`List`可以方便地进行遍历和操作。
```java
// Map转List
Map
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
// 转换为键的List
List
System.out.println(keyList); // 输出: [Apple, Banana, Cherry]
// 转换为值的List
List
System.out.println(valueList); // 输出: [1, 2, 3]
// 转换为键值对的List
List
for (Map.Entry
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
五、实际应用场景:构建购物车系统
想象一下,你要做一个购物车系统,管理商品和购物车中的商品数量,那集合框架就能派上大用场啦!
```java
// 商品类
public class Product {
private String name;
private double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return name + " - " + price;
}
}
// 购物车类
public class Shoppin