JavaSE-12 【集合】
第一章、Java集合
1、Java集合就像一个容器
- 可以存储任何类型的数据,
- 可以结合泛型来存储具体的类型对象。
- 在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。
2、Java中,集合类通常存在于java.util包中
3、Java集合主要由2大体系构成
- 分别是Collection体系和Map体系
- 其中Collection和Map分别是2大体系中的顶层接口
4、Collection主要有三个子接口
-
分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复
-
List中主要有ArrayList、LinkedList两个实现类;
-
Set中则是有HashSet实现类
-
Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在
5、Map同属于java.util包中,是集合的一部分:但与Collection是相互独立的,没有任何关系
- Map中都是以key-value的形式存在
- 其中key必须唯一,key可以为空,value可以为空,可重复
- 主要有HashMap、HashTable、treeMap三个实现类
第二章、Collection介绍
2.1 Connection是什么:
Java是一门面向对象的语言,为了方便操作多个对象,想要存储多个对象(变量),需要一个容器,那就是collection
常用容器
- 常用的容器有:StringBuffered,StringBuilder,数组。
- 但是由于数组的长度固定;访问方式单一,只能用下标,
- 删除数据,数据不连续,需要往前移动数据
- 插入数据,数据要向后移动,这些缺点
- 所以,java就为我们提供了集合(Collection)
2.2 集合与数组的区别
长度的区别:数组的长度固定;集合的长度可变
内容的区别:数组存储的是同一种类型的元素,集合可以存储不同类型的元素(一般不这样做)
元素的数据类型:数组可以存储基本数据类型,和引用类型。集合只能存储引用类型(若是简单的int,它会自动装箱成Integer)
2.3 Collection的功能
集合可以存储多个元素,但对多个元素也有不同的需求
- 多个元素,不能有相同的
- 多个元素,能够按照某个规则排序
针对不同的需求:java就提供了很多集合类,多个集合类的数据机构不同,但是,数据结构不重要,重要的是能够存储东西,能够判断,获取。把集合共性的内容不断往上提取,最终形成集合的继承体系———Collection
2.4 Collection和Map的继承体系结构
(4接口,9个类)
![\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tva4fYnE-1687769946090)(photo/JavaSE12_集合.assest/71c86975efae47bbaecce40bc005638a.png)\]](https://img-blog.csdnimg.cn/8a5d1b17c6c6451383edbce0b43c2f49.png)
2.5 Collection常用API
添加功能:
boolean add(Object obj) 添加一个元素
boolean addAll(Collection c) 添加一个集合元素
获取功能:
Iterator<E> iterator() 迭代器
int size() 获取元素的个数即集合的长度
Object[] toArray() 将集合转为数组
删除功能:
void clear() 移除所有元素
boolean remove(Object) 移除一个元素
boolean removeAll(Collection c) 移除一个集合的元素,只要一个元素被移除课就返回true
判断功能:
boolean contains(Object o) 判断集合是否包含该元素
boolean containsAll(Collection c) 判断集合中是否包含指定的集合元素,只有包含所有的元素才叫包含
boolean isEmpty() 判断集合是否为空
交集功能:
boolean retainAll(Collection c)
移除此collection中未包含在指定collection中的所有元素
即:集合A和集合B做交集,最终的结果会保存在集合A,返回值表示的是集合A是否发生过变化
2.6 Collection的API案例
package com.zzy.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
/**
* 测试Collection集合
*/
public class TestCollection {
public static void main(String[] args) {
Collection<Integer> c1 = new ArrayList<>();
//1 添加元素
c1.add(1);
c1.add(2);
c1.add(3);
c1.add(4);
c1.add(5);
c1.add(6);
c1.add(7);
c1.add(8);
c1.add(1024);
//2 删除元素
c1.remove(1024);
//3 获取长度
int size = c1.size();
System.out.println("集合长度是: "+size);
// 4 判断是否为空
boolean empty = c1.isEmpty();
System.out.println("集合为空否: "+empty);
//5 集合转数组
Object[] toArray = c1.toArray();
System.out.println("集合转数组后的结果是: "+ Arrays.toString(toArray));
//6 遍历集合iterator()
Iterator<Integer> iterator = c1.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("-------------------");
Collection<String> c2 = new ArrayList<>();
c2.add("A");
c2.add("B");
c2.add("C");
//7 判断集合是否包含元素 A
boolean a = c2.contains("A");
System.out.println("包含与否"+a);
Collection<String> c3 = new ArrayList<>();
c3.add("孙悟空");
c3.add("猪八戒");
c3.add("沙和尚");
c3.add("白龙马");
//8 清空集合
c3.clear();
System.out.println(c3.toString());
/*
addAll(Collection c) 添加一个集合元素
removeAll(Collection c)
移除一个集合的元素,只要一个元素被移除就返回true
containsAll(Collection c)
判断集合中是否包含指定的集合元素,只有包含所有的元素才叫包含
retainAll(Collection c)
移除此collection中未包含在指定collection中的所有元素
即:集合A和集合B做交集,最终的结果会保存在集合A,
返回值表示的是集合A是否发生过变化
*/
Collection<String> c5 = new ArrayList<>();
Collection<String> c6 = new ArrayList<>();
Collection<String> c7 = new ArrayList<>();
Collection<String> c8 = new ArrayList<>();
c5.add("AA");
c5.add("BB");
c6.add("北京");
c6.add("成都");
c6.add("重庆");
c6.add("福州");
c7.add("福州");
c8.add("北京");
c8.add("成都");
c8.add("重庆");
//添加一个集合元素
c5.addAll(c6);
System.out.println(c5.toString());
//移除一个集合的元素
System.out.println("移除成功与否:"+c5.removeAll(c7));
System.out.println(c5.toString());
//判断集合中是否包含指定的集合元素
System.out.println("判断集合中是否包含是定集合元素:"+c5.containsAll(c8));
Collection<String> c11 = new ArrayList<>();
Collection<String> c12 = new ArrayList<>();
c11.add("AA队");
c11.add("BB队");
c11.add("CC队");
c11.add("DD队");
c12.add("AA队");
c12.add("BB队");
c12.add("FF队");
//移除此collection中未包含在指定collection中的所有元素
System.out.println("C11是否发生变化:"+c11.retainAll(c12));
System.out.println(c11.toString());
System.out.println("C12是否发生变化:"+c12.retainAll(c11));
System.out.println(c12.toString());
}
}
第三章、List集合
在Collection中,List集合是有序的,可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素
在List集合中,我们常用到ArrayList和LinkedList这两个类。
3.1 ArrayList集合
1 介绍:
- 底层通过数组实现,随着元素的增加而动态扩容
- ArrayList默认构造的容量为10,默认扩容1.5倍,新容量 = 旧容量 * 1.5
- Java集合框架中使用最多的一个类,是一个数组队列,线程不安全集合。
2 特点
- 容量不固定,随着容量的增加而动态扩容的有序集合
- 插入的元素可以为null
- 增删改查效率更高(相对于LinkedList来说)
- 线程不安全
3 功能
- ArrayList实现List,得到了List集合框架基础功能;
- ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;
- ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;
- ArrayList实现Serializable,表示可以被序列化,通过序列化去传输,
4 常用API
添加功能
boolean add(E e):向集合中添加一个元素
void add(int index, E element):在指定位置添加元素
boolean addAll(Collection<? extends E> c):
向集合中添加一个集合的元素。
删除功能
void