文章目录
主要接口
集合框架的主要接口
声明了对各种集合类型执行的一般操作
包括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
调用接口
java
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接口的使用举例
java
//此代码由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
java
//此代码由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:这些笔记是我个人所写,难免存在一些疏漏或错误。如果大家在阅读过程中发现任何问题,请不吝赐教,我将非常感激您的指正和谅解。如笔记内容涉及任何侵权问题,请及时与我联系,以便我尽快做出相应的删除处理。