[Java 数据结构] Iterable、Collection、List 的常见方法签名以及含义

目录

一、Iterable

二、Collection(集合、容器)

1.介绍

2.方法

3.总结

三、List 线性结构

1.介绍

2.方法

3.总结

四、举例


Iterable 具备迭代的能力   -able:具备某种能力         Iterate:迭代(遍历)        Iterator:迭代器(用来迭代对象)

一、Iterable


public interface Iterable<T>{

Iterator <T> iterator();                             //抽象类中的抽象方法

default void forEach(Consumer<? super T>action){ ... }

default Spliterator<T> spliterator(){ ... } //接口中的默认方法 == 抽象类中的非抽象方法

}

1.是一个泛型接口<T>

2.T:被迭代(遍历)的元素类型

public interface Iterable<T>{  Iterator <T>      iterator();   }  这个对象提供了一个iterator()方法,这个方法返回了一个Iterable 对象:用来被迭代的对象(被称为迭代器)。

使用:

ArrayList<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");

Iterator<String> it = list.iterator();  //使用it 指向的Iterator 对象,进行迭代(遍历)

二、Collection(集合、容器)


1.介绍

线性表是一种Collection,非线性表也是一种Collection。Collection 不具备线性结构的特点,所有Collection 都具备迭代能力 ,Collection 接口 继承自 Iterable 接口

2.方法

1.int size();        返回容器中元素的个数

2.boolean isEmpty();        容器是不是空的  size() == 0

容器是null:口袋都没有;容器是 empty:口袋有,但是口袋中没有东西。

3.boolean contains(Object o);         contains包含:容器中,是否存在 o 元素

隐含着,需要遍历容器中所有的元素,和 o 元素进行相等性比较,意味着,会调用 equals 方法,所以。如果想让 contains 正确的返回,必须正确的重写元素的 equals 方法。

4.boolean add(E e);         把元素 e 放入容器中

由于容器不一定是线性结构,所以放入可能会失败。比如,容器中不允许出现相同的元素,当场时放入重复元素时,就会放入失败。返回 ture :放入成功;返回 false :放入失败。注意:无法明确放入是具体的放入了哪个位置。

5.boolean remove(Object o);        将容器中和 o 相等的其中一个元素删除掉

相等性,意味着equals,只删除一个但不保证是哪一个。

6.boolean addAll(Collection c)        将 c 容器中的所有元素,都放入到当前容器中

元素之间是没有顺序的。

7.void clear();        清空容器中的所有元素

3.总结

方法介绍
int size();        返回容器中元素的个数
boolean isEmpty();容器是不是空的  size() == 0
boolean contains(Object o);容器中,是否存在 o 元素
boolean add(E e); 把元素 e 放入容器中
boolean remove(Object o); 将容器中和 o 相等的其中一个元素删除掉
boolean addAll(Collection c)将 c 容器中的所有元素,都放入到当前容器中
void clear();清空容器中的所有元素

三、List 线性结构


1.介绍

线性结构:元素有顺序了,有前后关系,有第一个、第二个、最后一个位置概念出现了,头插、尾插、头删、尾删,可以排序。List 继承自 Collection 所以List 具备迭代能力,具备装元素的能力。

线性表:属于逻辑结构中的线性结构,它包括顺序表和链表。

        顺序表逻辑上相邻的数据元素,物理存储位置也相邻;存储空间需要预先分配。顺序存储结构是一种随机存取的存储结构。

        链表逻辑上相邻的数据元素,物理存储位置不一定相邻。存储空间可以动态分配,缺点:要额外占用存储空间存储元素之间的关系。链式存储结构是一种顺序存取的存储结构。

2.方法

1.boolean add(E e);        对应尾插操作

对于线性结构来说,尾插是不可能失败的(内存不够用不在讨论范围之内),返回值永远是 true 。为什么定义成 void 呢?因为Java 的方法重写规则(不能改变方法签名)。

2.void add(int index,E element);        将元素插入到给定位置

从【index,size()】所有元素逻辑上后移一位,index的合法范围【0,size()】。

3.boolean remove(Object o);        删除第一个遇到的和 o 相等的元素

 equals:相等,返回值代表是否删除成功

4.E remove(int index);        将【index】位置的元素从线性结构中取出并返回

让【index + 1,size()】的所有元素,逻辑上前移一个位置,index的合法下标【0,size())。

5.boolean addAll(Collection c);        将c 容器中的所有元素(按照一定的次序),尾插

这个次序目前不确定,永远返回true。

6. void sort(Comparator<E> c);        以c 作为元素的比较器,衡量元素大小进行原地排序

调用完成之后,list 变成“有序的 via Comparator c”

7.E get(int index);        返回index 位置的元素

index的合法范围【0,size())。

8.E set(int index,E element);        用element 替换 index 位置的元素,并返回 index 位置原来的元素

index的合法下标【0,size())。

9.int indexOf(E e);        从前往后,第一个和 e 相等的元素所在位置

10.int lastIndexOf(E e);        从后往前,最后一个和 e 相等的元素所在的位置

11.List<E> subList(int fromIndex,int toIndex);        将原有线性结构的【fromIndex,toIndex)截取成一个新的线性结构并返回

3.总结

方法介绍
boolean add(E e); 对应尾插操作
void add(int index,E element); 将元素插入到给定位置
boolean remove(Object o); 删除第一个遇到的和 o 相等的元素
E remove(int index);     将【index】位置的元素从线性结构中取出并返回
boolean addAll(Collection c);   将c 容器中的所有元素(按照一定的次序),尾插
void sort(Comparator<E> c);     以c 作为元素的比较器,衡量元素大小进行原地排序
E get(int index); 返回index 位置的元素
E set(int index,E element);用element 替换 index 位置的元素,并返回 index 位置原来的元素
int indexOf(E e); 从前往后,第一个和 e 相等的元素所在位置
int lastIndexOf(E e);   从后往前,最后一个和 e 相等的元素所在的位置
List<E> subList(int fromIndex,int toIndex);将原有线性结构的【fromIndex,toIndex)截取

四、举例


以ArrayList 为例,观察上述方法的使用:

ArrayList<String> list = new ArrayList<>();

List<String> list = new ArrayList<>();

new ArrayList<>()        构造普通顺序表,容量采用默认值

newArrayList<>(int capacity);        以capacity 作为初始容量,构造顺序表

newArrayList<>(Collection c);        以 c 中的所有元素作为当前顺序表中的元素构造顺序表,等价于 newArrayList<>();    list.addALL(c);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值