【Java-collection体系集合】
一、概念
1. 集合:是一种工具,也是一种容器,用于存储数量不等的多个对象。
2. 集合相关的接口和类位于 java.util 包中。
3. 学习集合从以下 4个点入手:
(1) 集合接口的特点
(2) 集合接口中功能方法
(3) 集合接口对应的实现类
(4) 集合的遍历方式
二、Collection集合体系
1. 父接口:Collection接口
(1) 特点:存储任意类型Object对象。
(2) 方法:
a. boolean add(Object o):将o对象添加到集合中。
b. boolean contains(Object o):判断当前集合中是否包含 o元素,包含-true;否则-false。
c. boolean remove(Object o):将 o对象从当前集合中移除、删除。
d. int size() : 返回此集合中的元素的个数。
e.void clear():清空此集合是否为空。
f.boolean isEmpty():判断此集合是否为空。
g.Object[ ] toArray(): 将此集合转换成数组。
(3) 实现类:没有直接的实现类,详见子接口。
(4) 遍历:详见子接口。
2. 子接口:List接口
(1) 特点:存储任意类型的Object对象,有序、有下标、元素允许重复。
下标的范围: 0 ~ 有效元素个数 - 1 (0 ~ size - 1)
(2) 方法:List是Collection的子接口,所以Collection接口中定义的方法List都可以使用,同时自身也定义了一些方法:
- void add(int index,Object o) //在index位置插入对象
boolean addAll(int index,Collection c) //将c中元素一次性插入到集合中指定下标
Object get(int index) //返回集合中指定位置的元素
- Object remove(int index) //移除index位置上的元素
Object set(int index, Object element) //替换index位置上的元素
- List subList(int fromIndex, int toIndex) //返回集合中指定部分的元素
(3) 实现类:ArrayList,底层用数组实现的
a. ArrayList:底层数组实现的,查询操作时效率较高,增删操作效率较低。
JDK2.0版本,线程不安全,运行效率较高。
注意:JDK1.7版本,创建ArrayList对象时,并没有完成数组空间分配,而是第一次往集合中存储
元素(add方法时),才完成数组空间分配,数组的初始长度为10,每次扩充为1.5倍。
b. Vector: 底层数组实现的,查询操作时效率较高,增删操作效率较低。
JDK1.0版本,线程安全,效率较低。
c. LinkedList:底层链表实现,查询操作时效率较低,增删效率较高。
线程不安全,运行效率较高。
面试题目:写出ArrayList 和 LinkedList区别?
(4) 遍历:将集合中元素进行一一的访问。
a. 下标遍历:通过集合中的下标对集合元素进行一一访问
for(int i=0;i<集合名.size(); i++){
// 通过下标 i ,获取集合中每一个元素: get方法
}
b. forEach遍历:
for(数据类型 变量名 : 要遍历的集合名) {
// 直接利用变量名操作集合元素即可
}
注意:变量的数据类型取决于集合的泛型类型。
forEach遍历的底层原理:迭代器遍历
I. 获取迭代器对象:
Iterator it = 集合名.iterator();
II. 迭代器中方法:
① hasNext() : 判断迭代器中是否还有要操作的元素,有-true;没有-false。
② Object next() : 调用一次,返回迭代器中的下一个元素。
III.迭代器的遍历方式:
Iterator it = 集合名.iterator();
// 遍历迭代器
while(it.hasNext()){
// 通过next方法获取迭代器中下一个元素
System.out.println(it.next());
}
3. 泛型
(1) 泛型集合:安全性的集合,可以对集合中数据统一管理,并且强制约束集合的元素类型一致。
List<数据类型> 集合名 = new ArrayList<数据类型>();
(2) 泛型类:
a. 语法: class 类名<泛型标识1,泛型标识2>{
// 将 泛型标识作为数据类型应用
}
注意:通常用:K/V/E/T等作为泛型标识。
b. 应用:在创建对象时,需要制定泛型的数据类型。
类名<数据类型> 对象名 = new 类名<数据类型>();
注意:前后数据类型要一致;
基本数据类型不能作为泛型的类型,需要应用基本数据类型对应的包装类型;
如果创建对象时,没有指定泛型的类型,则默认为Object类型;
如果定义类型有多个泛型标识,要么按顺序指定所有的泛型数据,要么都不指定。
4. 集合工具类:Collections
(1) Collections:用于操作集合元素的工具类,类中提供了大量的静态方法用于操作集合元素,例如元素排序、倒置等操作。
(2) 常用的方法:
a. static void reverse(List list):将集合中元素进行倒置。
b. static void shuffle(List list):对集合中元素进行随机显示。
c. static void sort(List list): 对集合中元素进行排序。
注意:如果参与排序的集合中元素为自定义类型的对象,则对应的类需要实现
java.lang.Comparable接口,同时实现接口中compareTo方法,指定排序规则。
I. 第一种比较器 java.lang.Comparable接口,接口中有一个 int compareTo(T t) ,将当前对象this
和 t 进行比较,参与比较的对象对应的类需要实现此接口,同时实现此方法。-》内置比较器
II. 第二种比较器: java.util.Comparator 接口,接口中定义了 int compare(T o1, T o2) ,将o1和o2进
行比较,定义在参与比较对象的类的外面。 ---》外置比较器
面试题目:写出 Collection 和 Collections的区别。
解析:Collection是 Java 中Collection集合体系的父接口,有List和Set等子接口。
Collections:是操作集合元素的工具类,类中定义大量的静态方法。