集合.队列.栈

集合

  • 集合与数组一样,用来保存一组元素,但是集合有多种不同的数据结构有各自的特点。
  • Collection下面有不同种类的集合,常见的两大类
    — java.util.List:线程表,是可重复的集合,并有序
    — java.util.Set:不可重复性的集合
    这里指定的重复是集合是否可以保存重复元素,而重复元素的
    判定标准是元素equals比较是否为true
  • boolean add(E e)
    该方法将给定的元素添加进集合,若添加成功则返回true,否则返回false
  • boolean addAll(Collection<?extends E> c)
    将一个集合中的所有元素添加到当前集合中
  • boolean contains(Object o)
    判断给定的元素是否是被包含在集合中,若包含则返回true,否则返回false
  • boolean containsAll(Collection<?> c)
    判断当前集合是否包含给定元素集合中的所有元素
  • int size()
    返回当前集合中元素的总数
  • void clear()
    清空集合
  • boolean isEmpty()
    判断当前集合是否不包含任何元素

Interator迭代器

  • hasNext next方法
案例

在这里插入图片描述

remove方法

  • 在使用迭代器遍历时,不能通过集合的remove方法删除集合元素,否则会抛出并发异常,我们可以通过迭代器自身提供的remove()方法来删除通过next()迭代出的元素
  • 迭代器的删除方法是在原集合中删除元素
  • 这里需要注意的是,在调用remove
  • 方法前必须通过迭代器的next()方法迭代元素,那么删除的就是这个元素,并且不能再次调用remove方法,除非再次调用next()会后方可再次调用
案例

在这里插入图片描述

增强for循环

  • java5.0之后推出了一个新的特性,增强for循环,也称为新循环.该循环不同于传统循环工作,其只用于遍历集合或数组
  • 语法
    for(元素 e:集合或数组){
    循环体
    }
案例

在这里插入图片描述

泛型机制

  • 泛型是java SE 5.0引入的特性,泛型的本质是参数化类型,在类.接口和方法的定义过程中,所操作的数据类型被传入的参数指定
  • 泛型机制广泛的应用在集合框架中,左右的集合类型都带有泛型,这样在创建集合时可以指定放入集合元素的类型,java编译器可以据此进行类型检查,这样可以减少代码在运行时出现错误的可能性
案例

在这里插入图片描述

集合操作线性表

List

ArrayList和LinkedList

  • List接口是Collection的子接口,用于定义线性表数据结构,可以将Listt来理解为存放对象的数组,只不过其元素个数可以动态(无序)的增加或减少
  • List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表(有序)的方式实现了List接口
  • 可以认为 ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别.ArrayList更适合于随机访问而LinkedList更适合于插入删除,在性能要求不是特别苛刻的情形下可以忽略这个差别
案例

在这里插入图片描述

get和set

  • List除了继承Collection定义的方法外,还根局其线程表的数据构造定义了一系列方法,其中最常用的就是基于下标get和set方法
    – E get(int index)
    获取集合中指定下标对应的元素,下标从0开始
    – E set(int index,E elment)
    将给定的元素存入给定位置,并将原位置的元素返回
案例

在这里插入图片描述

插入和删除

  • List根局下标的操作还支持插入与删除操作
    – void add(int index,E element);
    将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动
    – E remove(int index);
    删除给定位置的元素,并将被删除的元素返回
案例

在这里插入图片描述

List转换为数组

  • List的toArray方法用于将集合转换为数组,但实际上该方法是在Collection中定义的,所以所有的集合都具备这个功能
  • 其中有两个方法
    – Object[ ] toArray()
    – T[ ] toArray(T[ ] a)
    其中第二个方法是比较常用的,我们可以传入一个指定类型的数组,该数组的元素类型应与集合的元素类型一致,返回值则是转换后的数组,该数组会保存集合中所有的元素
案例

在这里插入图片描述

数组转换为List

  • Arrays类提供了一个静态方法asList,使用该方法我们可以将一个数组转换为对应的List集合
  • 其方法定义为:
    – static List asList<T…a>
  • 返回的List的集合元素类型由传入的数组的元素类型决定.
  • 并且要注意的是,返回的集合我们不能对其增删元素,否则会抛出异常,并且对集合的元素进行修改会影响数组对应的元素
案例

在这里插入图片描述

List排序

Colletions.sort方法实现排序

  • Collection是集合的工具类,他提供了很多便于我们操作集合的方法,其中就有用于集合排序的sort方法
  • 该方法定义为:
    – void sort(Listt list)
    该方法的作用是对给定的集合元素进行自然排序
案例

在这里插入图片描述

Comparable

  • Collections的sort方法是对集合元素进行自然排序,那么两个元素对象之间就一定要有大小之分。这个大小之分是如何界定的?实际上,在使用Collections的sort排序的集合元素都必须是Comparable接口的实现类,该接口表示其子类是可比较的,因为实现该接口口必须重写抽象方法:
    – int compareTo(T t)
    该方法用于是当前对象与给定对象进行比较
    – 若当前对象大于给定对象,那么返回值为>0的整数
    – 若当前对象小于给定对象,那么返回值为<0的整数
    – 若两个对象相等,则应返回0;
案例

在这里插入图片描述

Comparator

  • 一旦Java类实现了Comparable接口, 其比较逻辑就已经确定;如果希望在排序的操作中临时指定比较规则,可以采用Comparator接口回调的方式。
  • Comparator接口要求实现类必须重写其定义的方法:
    – int compare(T o1,T o2)
  • 该方法的返回值要求:
    – 若o1> o2则返回值应>0
    – 若o1 < o2则返回值应<0
    – 若o1= = o2则返回值应为0
案例

在这里插入图片描述

队列和栈

Queue

  • 队列( Queue )是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另-端取出(poll)元素。
  • 队列遵循先进先出( FIFO First Input First Output )的原则。
  • JDK中提供了Queue接口,同时使得LinkedList实现了该接口(选择LinkedList实现Queue的原因在于Queue经常要进行添加和删除的操作,而LinkedList在这方面效率较高)。
  • boolean offer(E e);
    将一个对象添加至队尾,如果返回true则添加成功
  • E poll();
    从队首删除并返回一个元素
  • E peek();
    返回队首的元素(但并不删除)
案例

在这里插入图片描述

Deque

  • Deque是Queue的子接口,定义了所谓"双端队列”即从队列的两端分别可以入队( offer )和出队( poll ) ,LinkedList实现了该接口。
  • 如果将Deque限制为只能从一端入队和出队,则可实现"栈”(Stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop.
  • 栈遵循先进后出( FILO First Input Last Output )的原则。
    在这里插入图片描述
案例

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值