1.为什么需要集合
数组一旦定义,大小无法修改,存储的数据必须是同一类型,但是实际应用需要变长
在 Java 中,集合框架 就可以帮我们解决这个问题。使用集合,可以实现两个功能:
- 集合中的元素个数是可变的。
- 集合中可以存储不同类型的数据。
2.Java中的集合
集合框架中的类是为了容纳一些对象,便于对象的访问和传输,可以看成可变的 对象数组,但是集合的操作中又包含了更为强大的功能。在 Java 中,集合框架里面 提供了丰富的 API,主要是以下两类:
1.一维集合
该类集合中,存放数据是一维的,类似于变长的一维数组。该系列最顶级是 Collection 接口,在该接口下,有三个子系列:List、Queue 和 Set。每个子系列中有一些类。
2.二维集合
该类集合中,也提供了容纳多个对象的功能,并且,可以为每个对象指定一个key 值。如果为两个不同的对象指定同一个 key 值,后面的将会把前面的覆盖。对象在集 合中没有顺序。因此,存放数据是二维的,相当于 2 列多行的变长二维数组。如图所示:
key | value |
---|---|
学号 | 0001 |
姓名 | 王刚 |
性别 | 男 |
该系列最顶级是 Map 接口,在该接口下,若干个子系列,每个子系 列中有一些类。
3.使用一维集合
(1)使用List集合
List 集合的共同特点是:
- 实现了 java.util.List 接口。
- 集合中元素有顺序。
- 允许重复元素。
- 每个元素可以通过下标访问。下标从 0 开始.
List 集合中最有代表性的是: 1. java.util.ArrayList。 2. java.util.LinkedList。 3. java.util.Vector。
这三个类的使用基本相同,但是在底层实现上有些区别。比如,ArrayList 不是线
程安全的,Vector 实现了线程安全。
package 练习;
import java.util.ArrayList;
public class ListTest1 {
public static void main(String[] args) {
ArrayList al = new ArrayList(); // 添加
al.add("中国");
al.add("美国");
al.add("日本");
al.add("韩国"); // 删除美国
al.remove(1); // 将 0 位置的元素修改为“China”
al.set(0, "China"); // 遍历
int size = al.size();
for (int i = 0; i < size; i++) {
String str = (String) al.get(i);
System.out.println(str);
}
}
}

(2)使用Set集合
Set 集合的共同特点是:
- 实现了 java.util.Set 接口。
- 默认情况下,集合中元素没有顺序。
- 不允许重复元素,如果重复元素被添加,则覆盖原来的元素。
- 元素不可以通过下标访问。
List 集合中最有代表性的是:java.util.HashSet。
import java.util.HashSet;
public class ListTest1 {
public static void main(String[] args) {
HashSet hs = new HashSet(); // 添加
hs.add("中国");
hs.add("美国");
hs.add("日本");
hs.add("韩国"); // 删除美国
hs.remove("美国"); // 遍历
java.util.Iterator ite = hs.iterator();
while (ite.hasNext()) {/*我们可以用 Iterator 对象的 hasNext()方法判断是否 存在下一个元素,然后用 Iterator 对象的 next()方法获取下一个元素。结合循环来实现。*/
String str = (String) ite.next();
System.out.println(str);
}
}
}


4使用泛型简化集合操作
虽然在集合中可以存储不同类型的对象,但是一般情况下我们仍然使用的是同一 种对象。在遍历时,每次都要强制转换,比较麻烦。



5.使用二维集合
(1)使用Map 集合
二维集合中,使用最多的是 java.util.HashMap。 HashMap 类提供了二维集合的功能,最常见的构造函数是: public HashMap()
用这个构造函数可以生成一个空的 HashMap 对象。 HashMap 类中,可以为每个对象指定一个 key 值。 注意,如果为两个不同的对象指定同一个 key 值,后面的将会把前面的覆盖。对
象在 HashMap 中没有顺序。


网友评论