集合框架(collection)
Collection:
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。
|--Vector:底层是数组数据结构。线程同步,速度都慢,已经被ArrayList替代了。
|--Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashSet值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true.
|--TreeSet:可以对Set集合中的元素进行排序。
记住,排序时,当主要条件相同时,一定判断一下次要条件。
底层数据结构是二叉树。
保证元素唯一的依据:compareTo方法return 0
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖Comparable方法。
这种方法也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是需要的。
这时就需要让集合自身具备比较性。
在聚合初始化时,就有了比较方式。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
Set集合的功能和Collection功能方法一样。
List:
特有方法,凡是可以操作角标的方法都是该体系结构特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
int indexOf(obj);//获取指定元素的位置。
ListIterator listIterator();
List集合特有的迭代器,ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的。
只能对元素进行判断(hasNext()),取出(next()),删除(removed())的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
枚举:枚举就是vector特有的取出方式。vextor的取出方式有枚举、遍历(也就是get(index))、按角标索引、迭代器。
其实枚举和迭代是一样的。为什么出迭代那,因为枚举的名称以及方法的名称都过长,所以被迭代取代啦,枚举郁郁而终了。
LinkedList:特有的方法:
addFirst();
addLast();
getFirst();
getLast();//只得到数据、
removeFirst();
removeLast();//不仅取出,而且还删除数据。
isEmpty();
因为这涉及到一个很重要的面试题:LinkedList link=new LinkedList();
link.addFirst("1");
link.addFirst("2");
link.addFirst("3"); 则该link的输出结果为3、2、1
(2) link.addLast("1");
link.addLast("2");则该输出结果为1、2 如果集合中没有元素,会出现NoSuchElementException
但是在jdk1.6出现了替代方法。
offerFirst();
offerLast();
增加元素。
peekFirst();
peekLast();
获取元素,但不删除元素,如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除,如果集合中没有元素,会返回null。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~