集合可以看作一个容器, 集合中的对象可以很容易存放到集合中, 也很容易将其从集合中取出来, 还可以按一定的顺序摆放. Java 中提供了不同的集合类, 这些类具有不同的存储对象的方式, 并提供了相应的方法方便用户对集合进行遍历.
集合的长度是可变的, 用来存放对象的引用. 常见的集合类有 List 集合, Set 集合, Map 集合.
一. 集合类接口
以下接口的常用方法有很多, 这里只提其中重要的几个方法, 其它方法在使用时可参照 API.
1. List 接口
List 是列表类型, 以线性方式存储对象, 自身的方法都与索引有关, 个别常用方法如下.
方法 | 返回值 | 功能描述 |
add(int index, Object obj) | void | 用来向集合中的指定索引位置添加对象, 集合的索引位置从 0 开始, 其他对象的索引位置相对向后移一位 |
set(int index, E element) | Object | 用指定元素替换列表中指定位置的元素, 返回以前在指定位置的元素 |
indexOf(Object obj) | int | 返回列表中对象第一次出现的索引位置, 如果集合中不包含该元素则返回 - 1 |
lastIndexOf(Object obj) | int | 返回列表中对象最后一次出现的索引位置, 如果集合汇总不包含该元素则返回 - 1 |
listIterator() | ListIterator | 用来获得一个包含所有对象的 ListIterator 迭代器 |
下面举一个实例, 看看如何创建并添加修改集合元素.
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class CollectionDemoList {
public static void main(String[] args) {
String aString = "A", bString = "B", cString = "C", dString = "D", eString = "E";
List<String> list = new LinkedList<>(); // 创建 list 集合对象
list.add(aString); // 向集合中添加元素
list.add(bString);
list.add(eString);
// 输出语句, 用迭代器
Iterator<String> iter = list.iterator(); // 创建集合迭代器
while(iter.hasNext()) { // 遍历集合中的元素
System.out.print(iter.next() + " ");
}
System.out.println(); // 换行
list.set(1, cString); // 将索引位置 1 的对象修改为对象 bString
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.print(it.next() + " ");
}
}
}
上述代码中, add() 方法用于向集合中添加元素, set() 方法用于修改集合中的元素, 迭代器用于遍历集合中的元素并输出 (会在下面的内容中涉及). 运行结果如下:
其中创建 List 集合对象时,"<>" 中是集合汇总元素的类型, 如上方的 String 表示集合中的元素由 String 字符串构成. 因为 List 是一个接口, 所以 new 的是接口的实现类, 在 Eclipse 中光标放在 List 上按 Ctrl+T 就可以看见 List 接口的所有实现类了.
2. Set 接口
Set 接口常用方法如下.
方法 | 返回值 | 功能描述 |
add(Object obj) | boolean | 若集合中尚存在未指定的元素, 则添加此元素 |
addAll(Collection col) | boolean | 将参数集合中所有元素添加到集合的尾部 |
remove(Object obj) | boolean | 将指定的参数对象移除 |
clear() | void | 移除此 Set 中的所有元素 |
iterator() | Iterator | 返回此 Set 中的元素上进行迭代的迭代器 |
size() | int | 返回此 Set 集合中的所有元素数 |
isEmpty() | boolean | 如果 Set 不包含元素, 则返回 true |
下面看一个例子, 用 addAll() 方法把 List 集合对象存入到 Set 集合中并除掉重复值.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class CollectionDemoSet {
public static void main(String[] args) {
List < String > list = new ArrayList < >(); // 创建 List 集合对象
list.add("dog");
list.add("cat");
list.add("fish");
list.add("cat"); // 重复值
Set < String > set = new HashSet < >(); // 创建 List 对象集合
set.addAll(list); // 将 List 集合对象添加到 Set 集合中
Iterator < String > it = set.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
}
}
同理, 创建 Set 对象集合时, Set 是一个接口, new 的是接口的实现类. 运行结果如下:
由于 Set 集合中的对象是无序的, 遍历 Set 集合的结果与插入 Set 集合的顺序并不相同.
3. Map 接口
Map 接口提供了将键映射到值的对象, 一个映射不能包含重复的键, 每个键最多只能映射一个值. Map 接口同样提供了 clear(),isEmpty(),size() 等方法, 还有一些常用方法如下.
方法 | 返回值 | 功能描述 |
put(key k, value v) | Object | 向集合中添加指定的 key 与 value 的映射关系 |
get(Object key) | boolean | 如果存在指定的键对象, 则返回该对象对应的值, 否则返回 null |
values() | Collection | 返回该集合中所有值对象形成的 Collection 集合 |
下面看一个例子.
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>(); // 创建 Map 集合
map.put("1", "dog");
map.put("2", "cat");
map.put("3", "fish");
for(int i=1; i<=3; i++) {
System.out.println("第" + i + "个元素是:" + map.get(""+ i +""));
}
}
}
具体写法参照上例即可. 运行结果如下:
创建 Map 集合时, Map 接口的 "<>" 中含有两个类型, 分别对应其 key 与 value.
二, 集合类接口的实现类
上面在定义一个接口时, 都有 new 一个实现类, 下面介绍几种常用的实现类.
1. List 接口的实现类
List 接口的实现类常用的有 ArrayList 和 LinkedList, 这两个实现类在上面的例子中已经出现过了.
ArrayList 类实现了可变的数组, 可以根据索引位置对集合进行快速的随机访问. LinkedList 类采用链表结构保存对象, 便于向集合中插入和删除对象. 对于线性结构和链式结构不清楚的朋友可以看我之前的博客 "数据的存储结构", 链接: http://www.cnblogs.com/adamjwh/p/5829604.html , 也可以自行查阅资料.
分别通过 ArrayList 和 LinkedList 类实例化 List 集合如下:
List list1 = new ArrayList();
List list2 = new LinkedList();
2. Set 接口的实现类
Set 接口的实现类常用的有 HashSet 和 TreeSet, 实现如下:
Set < String > set1 = new HashSet < String > ();
Set < String > set2 = new TreeSet < String > ();
3. Map 接口的实现类
Map 接口的实现类常用的有 HashMap 和 TreeMap, 建议使用 HashMap(效率相对较高).
实现如下:
Map map = new HashMap();
Map map = new TreeMap();
三, 迭代器
迭代器是利用 Iterator 接口创建的, 在上面已经出现过了. 如下是上方 Set 接口中的代码:
Iterator < String > it = set.iterator(); // 创建一个迭代器
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
上述代码用 Iterator 接口和 iterator() 方法创建了一个迭代器; 用 while 循环遍历这个集合, hasNext() 方法是循环判断条件, 即如果有元素可以迭代, 返回 true, 循环继续执行; next() 方法是返回迭代的下一个元素. 除了这两个方法外, Iterator 接口还有一个方法是 remove(), 用于从迭代器指向的 collection 中移除迭代器返回的最后一个元素.
posted on
2018-01-28 19:06
0o 霏霏 o0 阅读 (
...
) 评论 (
...
) 编辑 收藏
刷新评论 刷新页面 返回顶部
Powered by:
博客园
Copyright © 0o 霏霏 o0
来源: https://www.cnblogs.com/adamjwh/p/8372114.html