Collection 接口是单例集合的顶层接口,其中定义单列集合共有的方法。
Collection
- List 存取有序,有索引,元素可重复
- ArrayList 基于数组,查询快,增删慢
- LinkedList 基于链表,查询慢,增删快
- Set 无索引,元素不可重复
- HashSet 存取无序,基于哈希表+红黑树
- LinkedHashSet 继承自 HashSet,存取有序,在 HashSet 的基础上增加了链表结构
- TreeSet 存取无序,基于红黑树,支持元素排序
常用方法
boolean add(E e) //添加元素到集合中
void clear() //清空集合
boolean contains(Object o) //判断集合中是否包含某个元素
boolean isEmpty() //判断集合是否为空
int size() //获取集合元素数量
boolean remove(Object o) //移除集合中指定的元素
<T> T[] toArray(T[] a) //集合转数组
Iterator<E> iterator() //获取迭代器
迭代器
Iterator 接口是迭代器
boolean hasNext() //判断是否有下一个元素可以迭代
E next() //获取下一个元素
使用
//集合
Iterator<String> it = col.iterator();
while (it.hasNext()) {
String ele = it.next();
//...
}
注意事项:
1、迭代器是一次性的,不能重复使用
2、在使用迭代器迭代集合的过程中,不允许增加或删除集合中的元素,否则会抛出 ConcurrentModificationException
3、如果已经迭代到末尾,就不能使用 next() 方法获取元素了,否则会抛出 NoSuchElementException
增强 for 循环
语法格式
for (数据类型 变量名 : 集合 or 数组) {
//...
}
由于增强 for 循环底层基于迭代器,所有在遍历的过程中也不能对集合中的元素进行添加或删除操作。
泛型,是 Java 提供的一种编译期的类型安全检查机制,避免类型错误。
泛型类
public class 类名<泛型> {
}
泛型类中泛型的具体类型是在类的对象被创建时确定的,如果不指定,默认是 Object。
泛型方法
public <泛型> 返回值类型 方法名(形参列表...) {
}
泛型方法中泛型的具体类型是方法被调用时确定的。
泛型接口
public interface 接口名<泛型> {
}
泛型接口中泛型的具体类型可以由实现类指定,也可以延迟到实现类创建对象时指定。
泛型通配符
语法格式:<?>
受限泛型
上限
<? extends 上限类型> //表示能够接收上限类型及其子类
下限
<? super 下限类型> //表示能够接收下限类型及其父类
数据结构
线性结构
栈:先进后出
队列:先进先出
数组:查询快,增删慢
链表:查询慢,增删快
树结构
二叉树:每个节点的子节点数量不超过2
二叉查找树:在二叉树的基础上增加左小右大的规则,但二叉查找树有可能退化成链表。
平衡二叉树:是一种自平衡的二叉查找树,判断是否平衡的依据是左右子树的高度差的绝对值不能超过1,否则需要旋转。
左左:右旋
右右:左旋
左右:先对左子树左旋,再对自己右旋
右左:先对右子树右旋,再对自己左旋
红黑树:牺牲了一些查询效率,换来了较高的增删效率
List 集合
常用的方法
void add(int index, E element); //添加元素到指定的索引位置
E remove(int index); //移除指定位置的元素
E set(int index, E element); //替换指定位置的元素
E get(int index); //获取指定位置的元素
ArrayList
LinkedList
addFirst //添加元素到链表的头部
addLast //添加元素到链表的尾部
getFirst //获取链表头部的元素
getLast //获取链表尾部的元素
removeFirst //移除链表头部的元素
removeLast //移除链表尾部的元素
push //作为栈来使用,入栈,等同于 addFirst
pop //作为栈来使用,出栈,等同于 removeFirst
斗地主案例
准备牌(使用字符串拼接)
洗牌(Collections.shuffle)
发牌(循环取余)
看牌(直接打印)
Collection、List、泛型、数据结构
最新推荐文章于 2025-12-19 15:39:34 发布
本文介绍了Java集合框架中的List、Set接口及其具体实现,如ArrayList、LinkedList、HashSet和TreeSet,详细阐述了它们的特点和使用场景。此外,还讲解了泛型的概念、迭代器的使用规则以及增强for循环的注意事项。同时,提到了数据结构中的栈、队列、数组和链表,并对二叉树、二叉查找树和红黑树进行了概述。最后,通过一个斗地主案例展示了如何使用集合进行发牌操作。
126

被折叠的 条评论
为什么被折叠?



