JAVA中的集合主要是用来干嘛的呢?在JAVA语言中,为了方便对多个对象的操作,我们就需要一些能够存储这些对象的东西,虽然数组Array可以实现这个功能,但是它是有一定的弊端的。这时候就要用到JAVA集合了,JAVA集合就像一种容器,能够动态的将对象存入容器中。
先说说数组,虽然数组也可以用来存储对象,但是它是有它的弊端的
①数组一旦被创建后,它的长度是不可变得,就像这样 Object[] P = new Object(10) 之后是不能够改变它的长度的
②数组中实际的元素个数是不可知的,所以会导致一些空间的浪费。
为了避免上面的两个问题,我们就需要用到集合来解决了,JAVA的集合分为Collection接口和Map接口两种体系,首先Collection接口中包含两类,一是set,二是list,其中set的特点主要是其中的数据是无序的,不可重复的(有点类似于数学中的集合),list的特点是有序的,并且是可重复的,所以list可以叫做动态数组(平时用的数组是静态的)。而对于Map接口,它其实是一个有着映射关系的集合(就像数学中的函数一样),在它之中的任意一个元素,总能找到一个元素与之对应。
下面来说说关于集合中的Collection接口,在Collection接口中包含了一些方法,如下:
1:size() 它可以返回集合的元素个数
2:add(Object e) 它可以向集合中添加任意元素
3:addAll(Collection e) 它可以将e集合中的所有元素都添加到当前集合中去
4:clear() 看名字就知道,它可以清空集合
5;isEmpty() 它可以判断一个集合是否为空 其返回值是boolean类型的
上面五个的实现方式如下:
import
java.util.ArrayList;
import
java.util.Collection;
import
java.util.Date;
import
org.junit.Test;
public
class
CollectionTest {
@Test
public
void
testCollection1(){
//1:size():返回集合中的元素个数
Collection
A
=
new
ArrayList();
System.
out
.println(
A
.size());
//2:add(Object e):向集合中添加一个元素
A
.add(12);
System.
out
.println(
A
.size());
//3:addAll(Collection obj):将集合obj中的所有元素都添加到集合中去
Collection
obj
=
new
ArrayList();
obj
.add(
new
Date());
obj
.add(
"AA"
);
A.
addAll(
obj
);
System.
out
.println(
A
.size());
System.
out
.println(
A
);
//打印集合中的元素
//4:clear():清空集合中的元素
A
.clear();
System.
out
.println(
A
.size());
//5:isEmpty():判断集合是否为空
System.
out
.println(
A
.isEmpty());
}
}//输出结果如下
0
1
3
[12, Wed May 17 14:01:38 GMT+08:00 2017, AA]
0
true
6:contains(Object e
) 判断当前集合中是否有元素e
7:containsAll(Collection e) 判断当前集合中是否包含了集合e中的所有元素
8:retainAll(Collection e) 求当前集合与e的共有元素 并将其返回给当前集合
9:remove(Object e) 将元素e从当前集合中除去 成功返回true 失败返回false
10:removeAll(Collection e) 将当前集合中与集合e共有的元素删除 成功返回true 失败返回false
上五个的具体实现如下:
@Test
public
void
testCollection2(){
//6:contains(Object e):判断e是否存在于当前集合中
Collection
A
=
new
ArrayList();
Collection
C
=
new
ArrayList();
A
.add(
"BB"
);
A
.add(
"AA"
);
A
.add(123);
C
.addAll(
A
);
System.
out
.println(
A
.contains(
"BB"
));
//true
//7:containsAll(Collection e):判断当前集合是否包含了集合e的所有元素 存在返回true 反之返回false
Collection
B
=
new
ArrayList();
B
.add(
"BB"
);
B
.add(
"AA"
);
System.
out
.println(
A
.containsAll(
B
));
//true
//8:retainAll(Collection e):求e与当前集合的共有元素并返回给当前集合,成功返回true反之返回false
A
.retainAll(
B
);
System.
out
.println(
A
);
//[BB,AA]
//9:remove(Object e):删除当前集合中的元素e,若成功,返回true,反之返回false
System.
out
.println(
A
.remove(
"BB"
));
//true
//10:removeAll(Collection e):删除当前集合中与e所共有的元素,成功返回true,反之返回false
C
.removeAll(
B
);
System.
out
.println(
C
);
//[123]
}
}
11:equals(Object e) 判断两个集合是否完全相同
12:toArray() 将集合e转换为数组
13:hashcode():生成当前集合的哈希码
14:iterator() 返回一个Iterator(迭代器)类型的对象 从而可以实现当前集合的遍历!同时配合着Iterator中的hasNext()方法与next()方法使用可以做到遍历集合的目的 hasNext() 是一个返回值为boolean类型的方法,它可以用来判断集合从第一个元素开始是否存在下一个元素 而next()是返回集合的下一个元素。
以上四个方法的用法如下:
@Test
public
void
testCollection3(){
Collection
A
=
new
ArrayList();
Collection
C
=
new
ArrayList();
A
.add(
"BB"
);
A
.add(
"AA"
);
A
.add(123);
C
.addAll(
A
);
//11:equals() 判断两个集合是否完全相同
System.
out
.println(
A
.equals(
C
));
//true
//12:hashCode()
System.
out
.println(
A
.hashCode());
//2124026
//13:toArray() 将当前集合转换为数组
A
.toArray();
//14:iterator() 返回一个Iterator类型的对象,从而可以实现集合的遍历
//集合的遍历方法可以配合hasNext()方法与next()方法使用
Iterator
Obj
=
C
.iterator();
while
(
Obj
.hasNext())
{
System.
out
.println(
Obj
.next());
//BB AA 123
}
}
在这里重点是iterator()这个方法,它返回了一个Iterator(迭代器)类型的对象,在Iterator类型中有两个方法 分别是hasNext()与next() 那么hasNext()方法相当于一个指针 先判断集合的第一个元素是否存在 ,若存在,则指针指向第一个元素,然后依次进行后面元素的判断,若不存在则返回false。对于next()方法,它和hasNext()的判断方式一样,只不过它是返回存在的那个元素。一般来说,这两个方法是配合一起使用的 ,就像上面例子中的一样,其中的C集合的遍历就是利用了迭代器的遍历方法;其实我们还可以用增强for循环来遍历一个集合,具体的实现方法如下:
for
(Object
each
:
C
)
{
System.
out
.println(
each
);
}
对上面这个例子来说" : "后为需要被遍历的集合,而" : "后的变量为一个局部变量,它是用来存从集合C中遍历出的元素的(相当于对数组进行遍历时的S = A[1]),所以这个局部变量的类型一般声明为Object类型;如果在上面的for循环中加入了一条语句如下:
for
(Object
each
:
C
)
{
each
=
"帅哥"
;
System.
out
.println(
each
);
}
那么上面这个例子的输出就都为"帅哥"了,但是这里一定要注意集合C中所有元素的值还是没有发生改变的,相当于这里你只是改变了each所存的内容。那么增强for循环结束条件就是直到集合中的所有元素都被遍历了一遍。