文章目录
- 主要接口
- 集合框架的主要接口
- Collect接口
- Set接口
- 实现Set接口的类
- SortedSet接口
- List接口:线性表
- 实现List接口的类:
- Queue接口
- 实现Queue接口的类
- Map接口
- Map接口的定义
- Map接口的方法
- SortedMap接口
主要接口
集合框架的主要接口
声明了对各种集合类型执行的一般操作
包括Collection、Set、List、Queue、SortedSet、Map、SortedMap
基本结构如图:
Collect接口
声明了一组操作成批对象的抽象方法,包括查询和修改方法,包含两个主要的子接口:集合(Set)、列表(List),Collection接口声明时应该使用泛型,即Collection<E>,以下是Collect接口的几个常见的方法
查询方法
int size()
:返回集合对象中包含的元素个数boolean isEmpty()
:判断集合对象中是否还包含元素,如果没有任何元素,则返回trueboolean contains(Object obj)
:判断对象是否在集合中boolean containsAll(Collection c)
:判断方法的接收者对象是否包含集合中的所有元素
修改方法
boolean add(Object obj)
: 向集合中增加对象boolean addAll(Collection<?> c)
: 将参数集合中的所有元素增加到接收者集合中boolean remove(Object obj)
:从集合中删除对象boolean removeAll(Collect c)
:将参数集合中的所有元素从接收者集合中删除boolean retainAll(Collection c)
:在接收者集合中保留参数集合中的所有元素,其它元素都删除void clear()
:删除集合中的所有元素
eg-1
调用接口
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args) {
// 创建一个书籍列表
List<String> books = new ArrayList<>();
books.add("Java编程思想");
books.add("Python编程入门");
books.add("算法导论");
books.add("计算机网络");
// 创建一个要保留的书籍类型的列表
List<String> typesToRetain = new ArrayList<>();
typesToRetain.add("Java编程思想");
typesToRetain.add("算法导论");
System.out.println("原始书籍列表: " + books);
// 使用 retainAll 方法保留只存在于 typesToRetain 列表中的书籍
boolean result = books.retainAll(typesToRetain);
System.out.println("更新后的书籍列表: " + books);
System.out.println("是否进行了修改: " + result); // 如果列表有改变,则返回 true
}
}
运行结果:
原始书籍列表: [Java编程思想, Python编程入门, 算法导论, 计算机网络]
更新后的书籍列表: [Java编程思想, 算法导论]
是否进行了修改: true
Set接口
Set接口不允许有重复的元素,是数学几何的抽象,其不记录元素的保存顺序。对于equals和hashCode操作有了更强的约定,如果两个Set对象包含同样的元素,二者便是相等的。
实现Set接口的类
哈希集合(HashSet)及树集合(TreeSet)
其他:AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, JobStateReasons, LinkedHashSet
eg-1
HashSet接口的使用举例
//此代码由AI生成
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
// 创建一个 HashSet 实例
Set<String> set = new HashSet<>();
// 添加元素到 Set 中
set.add("Apple");
set.add("Banana");
set.add("Orange");
set.add("Apple"); // 尝试添加重复元素,不会成功
// 输出 Set 的内容
System.out.println("HashSet 内容: " + set);
// 检查 Set 是否包含某个元素
boolean containsBanana = set.contains("Banana");
System.out.println("Set 包含 Banana: " + containsBanana);
// 删除一个元素
set.remove("Orange");
System.out.println("删除 Orange 后的 HashSet: " + set);
}
}
运行结果:
HashSet 内容: [Apple, Orange, Banana]
Set 包含 Banana: true
删除 Orange 后的 HashSet: [Apple, Banana]
SortedSet接口
是一种特殊的Set类,其中元素是按照升序排列,还增加了与次序相关的操作,通常用于存放词汇表这样的内容,实现它的类有ConcurrentSkipListSet和TreeSet
eg-2
//此代码由AI生成
import java.util.SortedSet;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
// 创建一个 SortedSet 实例(TreeSet)
SortedSet<String> sortedSet = new TreeSet<>();
// 添加元素到 SortedSet 中
sortedSet.add("Orange");
sortedSet.add("Apple");
sortedSet.add("Banana");
sortedSet.add("Grapes");
// 输出 SortedSet 的内容,按字母顺序排序
System.out.println("SortedSet 内容: " + sortedSet);
// 获取第一个和最后一个元素
String firstElement = sortedSet.first();
String lastElement = sortedSet.last();
System.out.println("第一个元素: " + firstElement);
System.out.println("最后一个元素: " + lastElement);
}
}
运行结果:
SortedSet 内容: [Apple, Banana, Grapes, Orange]
第一个元素: Apple
最后一个元素: Orange
List接口:线性表
线性表允许有重复元素;记录元素的保存顺序,每个元素都有一个index值(从0开始)标明元素在列表中的位置。
主要的实现类是ArrayList、LinkedList,以及早期的Vector
实现List接口的类:
- ArrayList:一种类似数组的形式进行存储,因此它的随机访问速度极快
- LinkedList:内部实现是链表,适合于在链表中间需要频繁进行插入和删除操作
- 栈Stack:重要线性数据结构,遵循“后进先出”(Last In First Out,LIFO)原则
- 其他 : AbstractList, AbstractSequentialList, AttributeList,CopyOnWriteArrayList, RoleList, RoleUnresolvedList
Queue接口
除了Collection 的基本操作,队列接口另外还有插入、移除和查看操作。队列遵循“先进先出”(First In First Out,FIFO)的原则固定在一端输入数据(称为入队),另一端输出数据(称为出队)。重要的实现是LinkedList类。
实现Queue接口的类
LinkedList
:同时也实现了List,先进先出PriorityQueue
: 按元素值排序的队列- 其他:AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue
Map接口
Map接口的定义
用于维护键/值对(key/value pairs),不能有重复的关键字,每个关键字最多能够映射到一个值,声明时可以带有两个参数,即Map<K, V>,其中K表示关键字的类型,V表示值的类型,每一个Key不可重复并与唯一的Value值对应,在程序中可以通过K找到并访问唯一的V。重要实现类:HashMap类、TreeMap类
Map接口的方法
查询方法
int size()
—— 返回Map中的元素个数boolean isEmpty()
—— 返回Map中是否包含元素,如不包括任何元素,则返回trueboolean containsKey(Object key)
—— 判断给定的参数是否是Map中的一个关键字key)boolean containsValue(Object val)
—— 判断给定的参数是否是Map中的一个值(value)Object get(Object key)
—— 返回Map中与给定关键字相关联的值(value)Collection values()
—— 返回包含Map中所有值(value)的Collection对象Set keySet()
——返回包含Map中所有关键字(key)的Set对象Set entrySet()
—— 返回包含Map中所有项的Set对象
修改方法
Object put(Object key, Object val)
—— 将给定的关键字(key)/值(value)对加入到Map对象中。其中关键字(key)必须唯一,否则,新加入的值会取代Map对象中已有的值void putAll(Map m)
—— 将给定的参数Map中的所有项加入到接收者Map对象中Object remove(Object key)
—— 将关键字为给定参数的项从Map对象中删除void clear()
—— 从Map对象中删除所有的项
SortedMap接口
是Map的子接口;一种特殊的Map,其中的关键字是升序排列的;通常用于词典和电话目录等 。
PS:这些笔记是我个人所写,难免存在一些疏漏或错误。如果大家在阅读过程中发现任何问题,请不吝赐教,我将非常感激您的指正和谅解。如笔记内容涉及任何侵权问题,请及时与我联系,以便我尽快做出相应的删除处理。