Java的集合大致可分为:Set、List和Map三种体系。从JDK1.5以后,Java又增加了Queue体系集合。
为了保存数量不确定的数据,以及保存具有映射关系的数据,Java提供集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有集合类都位于java.util包下。
Set集合类似一个罐子,把一个对象添加到Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复。
List集合像一个数组,它可以记住每次添加元素的顺序,只是List的长度可变。
Map集合也像一个罐子,只是它里面每项数据都由两个值组成。
对于Set、List和Map三种集合,最常用的实现类是:HashSet、ArrayList和HashMap。
集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象引用变量);而集合里只能保存对象(实际也是保存对象的引用变量)。
Q1:为什么要出现集合类?
面向对象语言对事物的体现都是对象的形式,为了方便多个对象的操作,就必须对对象进行存储,集合就是存储对象最常用的一种方式。
Q2:集合和数组都是容器有哪些异同?
数组只能存储相同类型的对象,而且数组的长度确定不可变,数组可以存储基本数据类型也可以存储对象;
集合可以存储不同类型的对象,而且集合长度是可变的,集合只能存储引用数据类型。
集合使用操作步骤:
- 创建集合对象
- 创建元素对象
- 添加元素对象
- 遍历集合对象
-
- 判断集合对象中是否有元素(hasNext())
- 获取集合对象的下一个元素(Next())
遍历集合集合一般采用两种方法。一、先将集合转换为Object[]数组,然后遍历数组;二、直接采用Iterator迭代器。
示例:创建Student对象,包含Name和Age两个属性。然后创建一个集合用于存储Student的对象。然后遍历集合,输出集合对象。
/*
创建Student类
*/
public
class
Student {
private
String
name
;
private
int
age
;
public
Student() {
super
();
//
TODO
Auto-generated constructor stub
}
public
Student(String name,
int
age) {
super
();
this
.
name
= name;
this
.
age
= age;
}
public
String getName() {
return
name
;
}
public
void
setName(String name) {
this
.
name
= name;
}
public
int
getAge() {
return
age
;
}
public
void
setAge(
int
age) {
this
.
age
= age;
}
@Override
public
String toString() {
return
"[name="
+
name
+
", age="
+
age
+
"]"
;
}
}
/*
创建集合、遍历集合、输出结果
*/
import
java.util.ArrayList;
import
java.util.Collection;
import
java.util.Iterator;
public
class
ArrayList2 {
public
static
void
main(String[] args) {
// 创建集合
Collection c =
new
ArrayList();
// 创建元素对象
Student s1 =
new
Student(
"AAA"
, 20);
Student s2 =
new
Student(
"BBB"
, 20);
Student s3 =
new
Student(
"XXX"
, 20);
Student s4 =
new
Student(
"YYY"
, 20);
// 添加对象
c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
// 遍历集合
/* 方法一、通过Object[]数组进行遍历 */
Object[] obj = c.toArray();
for
(
int
i = 0; i < obj.
length
; i++) {
Student stu = (Student) obj[i];
// String str = (String) obj[i]; //不能直接将Student对象转换为String类型,否则将会报错。
System.
out
.println(stu);
}
System.
out
.println(
"----------------------"
);
/* 方法二、通过Iterator进行遍历 */
Iterator it = c.iterator();
while
(it.hasNext()) {
System.
out
.println(it.next());
}
}
}
输出结果:
[name=AAA, age=20]
[name=BBB, age=20]
[name=XXX, age=20]
[name=YYY, age=20]
----------------------
[name=AAA, age=20]
[name=BBB, age=20]
[name=XXX, age=20]
[name=YYY, age=20]