Java集合框架_三_Collection接口
来源:互联网 发布:mac关闭自启动程序 编辑:程序博客网 时间:2024/05/05 07:08
第一篇博客中提到了集合中的两组接口,Collection 和 Map,它们有各自的特点,以便让开发者在编写代码有最合适的选择。从本篇开始,将逐一学习Collection接口及其子接口和实现类。
一、先啰嗦一下
Collection 接口是一个根部接口,以Collection 为父接口的这一组接口所存储的是一组对象,也可称作一组元素。那这些元素是否有序,是否允许重复,各种操作有无特殊性?根据这些问题,我们很容易理解为什么有子接口 List、Set和Queue了。
更多信息,查阅 JDK 官方文档。
二、方法
1、int size()
这个方法在循环列表时经常使用,它得到集合中的对象个数,集合中元素个数>Integer.MAX_VALUE时,则返回Integer.MAX_VALUE。
2、boolean isEmpty()
判断集合中是否包含对象,不多说。
3、boolean contains(Object o)
判断集合中是否包含指定的对象。
#当指定对象为null时,如果集合中至少有一个对象为null,那么调用此方法返回true;
#当指定对象不为空时,如果有对象 e 满足 o.equals(e),那么调用此方法将返回true。
#当指定对象为null,而调用该方法的集合对象不允许null元素存在时,则会抛出NullPointerException异常。
4、Iterator<E> iterator
此方法从Iterable接口中继承而来,返回的是在此集合上进行迭代的迭代器。由于Collection接口并不确定元素是否有序,即使有序,也无法确定是以何种方式排序,所以迭代的顺序不可预知。
5、Object[] toArray()
此方法将一组对象元素的存储方式转换成了数组,利用数组来管理这组对象。由迭代器方法 iterator 返回的对象顺序,也将作用到此方法。
另外,调用此方法返回的数组可以任意修改而不会对原集合造成任何影响。
此方法充当了基于数组的 API 和基于Collection 的 API 之间的桥梁
6、<T> T[] toArray(T[] a)
把集合存储到指定的数组 a 中,但如果 a 的容量不够了,那么将建立一个与 a 数组有相同运行时类型的新数组用来存储集合中的元素。
01
// 声明一个List
02
List<String> list =
new
ArrayList<String>();
03
04
// 添加元素
05
list.add(
"1"
);
06
list.add(
"2"
);
07
list.add(
"3"
);
08
list.add(
"4"
);
09
list.add(
"5"
);
10
list.add(
"6"
);
11
12
// 新建数组
13
String[] strArr =
new
String[
5
];
14
15
// 调用toArray(T[] a)方法
16
list.toArray(strArr);
17
18
// 输出数组
19
System.out.println(
"旧数组:"
);
20
for
(String str : strArr) {
21
System.out.println(str);
22
}
23
24
// 输出新数组
25
System.out.println(
"新数组:"
);
26
for
(String str : newStrArr) {
27
System.out.println(str);
28
}
01
结果如下:
02
旧数组:
03
null
04
null
05
null
06
null
07
null
08
新数组:
09
1
10
2
11
3
12
4
13
5
14
6
可以看到,strArr 的容量并不够容纳下集合元素,strArr不能胜任这份工作,toArray方法返回一个新的数组。下面将数组的容量增到到足以容纳下集合元素个数。
1
// 将数组的容量扩大,并初始化数组的一个元素
2
String[] strArr =
new
String[
7
];
3
strArr[
0
] =
"IAmHere"
;
1
结果如下:
2
1
3
2
4
3
5
4
6
5
7
6
8
null
可见,调用此方法会忽略掉初始化的数组元素,进而抢占数组,即使抢占后数组还有剩余容量,也不会分配给初始元素。
7、boolean add(E e)
向集合中添加指定元素 e。
返回true的情况:
(1)集合中没有此元素,集合允许添加指定类型 E;
(2)集合中由此元素,但允许有重复元素;
返回false的情况:集合不允许有重复元素,集合中有此元素。
8、boolean remove(Object o)
如果集合中有指定元素 o,则将 o 移除,并返回true,否则返回false。
9、boolean containsAll(Collection<?> c)
集合中包含集合 c 中的所有元素,则返回true。觉得苛刻吗?
10、boolean addAll(Collection<? extends E> c)
将指定集合 c 中的所有元素都添加到此集合中,集合若因此调用发生变化,则返回true。
有趣的是,自己添加自己会发生什么呢?我们来看看:
01
// 声明一个List
02
List<String> list =
new
ArrayList<String>();
03
04
// 添加元素
05
list.add(
"1"
);
06
list.add(
"2"
);
07
list.add(
"3"
);
08
list.add(
"4"
);
09
list.add(
"5"
);
10
list.add(
"6"
);
11
12
// 添加自己
13
list.addAll(list);
14
15
// 输出
16
for
(String str : list) {
17
System.out.println(str);
18
}
01
结果:
02
1
03
2
04
3
05
4
06
5
07
6
08
1
09
2
10
3
11
4
12
5
13
6
合理吗?官方文档说这种调用的行为是不确定的,那么我们最好别这么干!
11、boolean removeAll(Collection<?> c)
移除集合中那些也包含在指定集合 c 中的所有元素,若因此调用导致集合发生改变,则返回true。此调用移除的是两个集合的交集。
12、boolean retainAll(Collection<?> c)
移除集合中那些不包含在指定集合 c 中的所有元素,若因此调用导致集合发生改变,则返回true。此调用保留的是两个集合的交集。
13、void clear()
移除集合中的所有元素。
14、boolean equals(Object o)
比较集合和指定对象 o 是否相等。
15、int hashCode()
返回集合的哈希码值。(该学习下哈希码值了。)
三、Collection和Collections的区别
Collection是接口,它提供了上述方法。而Collections是一个工具类,它包含专门操作集合的静态方法,如排序、拷贝、匹配查找等等。更多关于Collections类的方法将在以后的博客中做介绍。
- Java集合框架_三_Collection接口
- Java 集合框架_Collection接口
- Java集合框架之_Collection接口
- Java集合源码学习(2)_Collection接口
- 集合框架_Collection
- JavaSE_集合_Collection接口简介
- java集合(上)_Collection集合
- Java集合框架_二_Iterator接口
- 集合框架_Collection存储字符串并遍历
- Java集合源码学习(3)_Collection接口的基础实现AbstractCollection
- 155_集合_Collection集合的常用方法详解_03_contains
- 集合框架_Collection集合的高级功能测试
- java集合框架详解(三)、List接口
- Java集合框架(三)
- Java集合框架(三)
- Java 集合框架三
- Java入门_集合框架
- 集合框架_Collection存储自定义对象并遍历案例
- 2014 1 14 笔记
- 数据恢复基础知识
- Android [USB]如何刪去USB的註冊表
- [leetcode] Longest Valid Parentheses DP~!
- 虚拟机共享——WIN7下GenyMotion和电脑共享的方法!详细教程
- Java集合框架_三_Collection接口
- 反反复复反反复复反反复复
- CV_32FC1和CV_64FC1 区别
- 视音频编解码基本术语及解释
- 《Apache MINA 2.0 用户指南》第十五章:代理
- MySql按日期进行统计
- Mybatis各种模糊查询
- Common Subsequence
- JQuery实现三大控件方法,(下拉,单选,复选)