目 录
3.Collection接口和Conllections工具类的区别
一.集合整体的体系
1.Collection集合体系的相关介绍
Collection集合体系中的集合皆为单列集合.Map集合才是双列集合(后面会详细介绍的!).
Colletion是集合的根接口,其子接口List和Set分别继承根接口.而ArrayList集合,LinkedList集合以及Vector集合是List集合的实现类.HashSet集合,LinkedHashSet集合以及TreeSet集合是Set集合的实现类.Collection,List,Set接口中的方法,其相对应的实现类也就可以直接使用,因为继承下来了.每个实现类不仅继承了其父接口中的方法,还都有自己独特的方法.
2.单列表集合的工具类Collections类
除此之外单列表集合还有一个针对集合操作的工具类Collections类,里面有很多常用的静态方法.
- public static <T > void sort (List < T > list); 对集合进行排序, 默认按照自然顺序
- public static <T > int binarySearch (List < ? > list, T key); 二分查找查找集合中的元素
- public static <T > T max(Collection < ? > coll); 获取集合中的最大值
- public static void reverse (List < ? > list); 反转集合中的元素
- public static void shuffle (List < ? > list); 随机置换集合中的元素,即打乱集合中的元素位置
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Test1 {
public static void main(String[] args) {
//Collections工具类中给方法
ArrayList<Integer> list = new ArrayList<>();
list.add(20);
list.add(24);
list.add(25);
list.add(22);
list.add(20);
list.add(26);
//list.sort();
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a - b;
}
});
System.out.println(list); //[20, 20, 22, 24, 25, 26]
//二分查找,元素必须有序
int index = Collections.binarySearch(list, 24);
System.out.println(index); //3
//获取最大最小值
Integer max = Collections.max(list);
Integer min = Collections.min(list);
System.out.println(max); //26
System.out.println(min); //20
//反转
Collections.reverse(list);
System.out.println(list); //[26, 25, 24, 22, 20, 20]
//随机置换
Collections.shuffle(list);
System.out.println(list); //[25, 20, 20, 22, 26, 24]
}
}
3.Collection接口和Conllections工具类的区别
- Collection 是一个集合接口.它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式.
- Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例化,是一个工具类,服务于Java的Collection框架(单列表集合).
- Collections 是一个包装类,Collection 表示一组对象,这些对象也称为 collection 的元素.
接下来就说一说各个接口与实现类啦!
二.集合中的根接口:Collection接口
Collection接口是集合中的根接口,里面有很多方法,会被子接口以及实现类所继承和使用.
1.Collection接口中的方法
- add(Object obj); 往集合中添加元素
- addAll(Collection c): 添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
- clear(): 移除所有元素
- remove(Object o): 移除一个元素
- removeAll(Collection c): 移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素 ,如果没有交集元素 则删除失败 返回false
- contains(Object o): 判断集合中是否包含指定的元素
- containsAll(Collection c): 判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含,才返回true)
- isEmpty(): 判断集合是否为空
- iterator(); 获取集合中的迭代器,通常用来遍历集合.
- size(): 元素的个数,也就是集合的长度
- retainAll(Collection c): 获取两个集合的交集元素放在集合中,返回的布尔值表示的是A集合是否发生变化
- toArray(); 把集合转换为数组
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
//Collection
Collection c1 = new ArrayList(); //多态,ArrayList是实现类
//往集合中添加元素
c1.add("aaa");
c1.add("bbb");
c1.add("ccc");
c1.add("ddd");
c1.add("eee");
Collection c2 = new ArrayList();
c2.add("aaa");
c2.add("bbb");
c2.add("ccc");
//集合只能存储引用数据类型的元素。
int num = 100;
c1.add(num); //Integer 自动装箱
c1.add(3.25);//Double
System.out.println(c1); //[aaa, bbb, ccc, ddd, eee, 100, 3.25]
boolean b = c1.addAll(c2);
System.out.println(b); //true
//删除集合中的某个元素
boolean b2 = c1.remove("aaa");
if (b2) {
System.out.println(c1); //[bbb, ccc, ddd, eee, 100, 3.25, aaa, bbb, ccc]
}
//c1 会删除掉两个集合的交集元素,c2的元素不影响。
boolean b3 = c1.removeAll(c2); //如果有交集元素被删除,返回true,没有交集元素被删除返回false
System.out.println(b3); //true
System.out.println(c1); //[ddd, eee, 100, 3.25]
System.out.println(c2); //[aaa, bbb, ccc]
//a集合.containsAll(b集合); 看a集合是否包含了所有b集合的元素,如果包含了返回true ,如果有一个没有包含就会false
boolean b4 = c1.containsAll(c2);
System.out.println(b4); //false
//获取长度的方法
int size = c1.size();
System.out.println(size); //4
//清空集合
System.out.println(c2); //[aaa, bbb, ccc]
c2.clear();
System.out.println(c2); //[]
}
}
2.遍历集合(用根接口的迭代器iterator();)
package com.xingyun.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
//遍历集合
Student s1 = new Student("张三", 23);
Student s2 = new Student("李四", 24);
Student s3 = new Student("王五", 25);
Collection list = new ArrayList();
list.add(s1);
list.add(s2);
list.add(s3);
//获取迭代器,来遍历集合中的元素
//接口 Iterator<E> 对 collection 进行迭代的迭代器。
//boolean hasNext()
// 如果仍有元素可以迭代,则返回 true。
// E next()
// 返回迭代的下一个元素。
Iterator iterator1 = list.iterator();
while (iterator1.hasNext()) {
Student stu = (Student) iterator1.next();
System.out.println(stu.getName() + "====" + stu.getAge());
}
//结果:
/*
张三====23
李四====24
王五====25
*/
}
}
3.集合与数组的互转
集合转换为数组:
- 方法一: 遍历集合放入到数组中
- 方法二: toArray()方法
数组转换为集合:(asList())
- 第一种情况:面对一个数组时,是把数组中的元素放入到集合中