Collection、List、泛型、数据结构

本文介绍了Java集合框架中的List、Set接口及其具体实现,如ArrayList、LinkedList、HashSet和TreeSet,详细阐述了它们的特点和使用场景。此外,还讲解了泛型的概念、迭代器的使用规则以及增强for循环的注意事项。同时,提到了数据结构中的栈、队列、数组和链表,并对二叉树、二叉查找树和红黑树进行了概述。最后,通过一个斗地主案例展示了如何使用集合进行发牌操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
     发牌(循环取余)
     看牌(直接打印)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YYDS97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值