Android 集合

1.集合

数组和集合都是对多个数据进行存储操作的。称为容器。

这里的存储指的是内存层面的存储,而不是持久化存储。

先看一下数组的缺点:

①数组一旦指定了长度,那么长度就被确定了,不能更改。

②数组一旦声明了类型以后,数组中只能存放这个类型的数据。即数组中只能存放同一种类型的数据。

③在数组中删除、增加元素时,效率低,需要大量移动其他元素。

④数组中实例元素的数量是没有办法获取的,没有提供对应的方法或者属性获取。

比如创建一个数组时指定了数组长度为6,然后在下标为0和1的位置放入了元素。这时候我们只能获取到数组的长度是6,但是却没办法索取到数组中实例存了几个元素。

⑤数组存储是有序的而且可重复的。无法满足无序和不可重复的要求。

正因为数组的这些缺点,才引入了集合。

集合有多种,不同集合的底层数据结构不同。集合不同,特点也不同。

先看一下集合的结构图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2f6Iqz6Iqz,size_20,color_FFFFFF,t_70,g_se,x_16

集合的应用场景:

当需要将多个相同结构的个体整合到一起的时候,需要用集合。

 

2.Collecton(接口类)

Collection是所有单列集合的父接口。在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。

方法如下:

public boolean add(E e) : 把给定的对象添加到当前集合中 。

public void clear() :清空集合中所有的元素。

public boolean remove(E e) : 从此列表中移除第一次出现的指定元素(如果存在)

public boolean contains(Object obj) : 判断当前集合中是否包含给定的对象。

public boolean isEmpty() : 判断当前集合是否为空。

public int size() : 返回集合中元素的个数。

public Object[] toArray() : 把集合中的元素,存储到数组中。

方法的使用:

//创建对象

Collection collection = new ArrayList();//接口不能创建对象,利用它的实现类创建对象

//add方法

collection.add(18);//集合有一个特点,就是只能存放引用数据类型,不能是基本数据类型。这里直接写入18基本数据类型时,基本数据类型会自动装箱成对应的包装类(Integer)

//addAll方法

List list = Arrays.asList(new Integer[]{12,18,7});

collection.addAll(list);//将另一个集合添加入collection中

//clear方法

collection.clear();//清空集合

//remove方法

boolean isRemove = collection.remove(7);//删除某个元素

//contains方法

boolean isContain = collection.contains(18);

//集合遍历

Iterator it = collection.iterator();

while(it.hasNext()) {

    Log.i(TAG, it.next());//打印每一个元素

}

//Collection遍历可以使用Iterator或者增强for循环,无法使用普通for循环,因为没有根据下标获取元素的方法

for(Object obj : collection) { //增强for循环

    Log.i(TAG,obj);

}

 

3.List(接口类)

java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

List的特点:

① List集合中的元素是可以重复的

②List集合中的元素是有序的

③List集合中的元素是带有索引值的 【它的子类依旧有这个特点】

List常用方法(与Collection相比,扩展的方法都跟索引有关):

public boolean add(E e) 

public boolean addAll(Collection<? extends E> c)

public void add(int index, E e) : 在列表的指定位置插入指定元素

public E get(int index) : 返回列表中指定位置的元素

public E set(int index, E e) : 用指定元素替换列表中指定位置的元素

public void clear() 

public boolean remove(E e)  : 从此列表中移除第一次出现的指定元素(如果存在)

public E remove(int index) : 移除指定位置的元素

public boolean contains(Object obj) 

public boolean isEmpty() 

public int size() 

public int indexOf(Object o) : 返回此列表中第一次出现的指定元素的索引。如果此列表中不包含该元素,则返回-1

public int lastIndexOf(Object o) : 返回此列表中最后出现的指定元素的索引。如果此列表中不包含该元素,则返回-1

方法使用:

List list = new ArrayList();//用实现类创建对象

list.add(13);

list.add(6);

此时输出list为:[13,6]

list.add(1,8);//在下标为1的位置插入元素8

此时输出list为:[13,8,6]

list.set(2,0);//把下标为2的元素改为0

此时输出list为:[2,8,0]

list.remove(0);//list有两个remove方法,一个是传入要删除的元素的下标,一个是传入要删除的元素。那这里的0代表下标呢还是元素呢?

此时输出list为:[8,0] //得出结论:在集合中存入的是Integer类型数据的时候,调用remove方法执行的是remove(int index)

Object of = list.get(1);

//list集合遍历

Iterator it = list.iterator();

while(it.hasNext()) {

    Log.i(TAG, it.next());//打印每一个元素

}

//List遍历可以使用Iterator或者增强for循环、普通for循环

for(Object obj : list) { //增强for循环

    Log.i(TAG,obj);

}

for(int i = 0;i < list.size();i++) { //普通for循环

    Log.i(TAG,list.get(i));

}

 

4.ArrayList(实现类)

java.util.ArrayList 存储的结构是数组结构 。元素增删慢,查找快,由于日常开发中使用最多的功能是查询数据、遍历数据,所以 ArrayList 是最常用的集合之一。

ArrayList与List相比,扩展的方法有:

public boolean ensureCapacity(int minCapacity) : 如有必要,增加此ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数

ArrayList有2个重要属性: elementData和 size;其中 elementData代表的是存放元素的数组;而 size代表的是 elementData数组中元素的数量。比如下图所示: elementData数组的长度是8,但是只存放了4个元素,这时候 size属性就是4。

我们在使用 ArrayList的时候会经常调用其 size()方法,返回的就是 elementData数组中已使用的元素的数量,也即是当前的 4;并且当我们新添加元素的时候,size所指代的也恰巧是新元素的下标(数组下标从0开始)。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2f6Iqz6Iqz,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值