java day025 集合【容器】

42 篇文章 1 订阅
42 篇文章 1 订阅

java day025 集合【容器】

1.为什么需要集合

目前来说,我们对于多个数据处理方式只能依靠数组进行,但是数组存在诸多问题。

  1. 复用度差

    数组对于多个数据的操作只支持一个数据类型,一旦需要操作其他的数据类型则需要从新创建数组。

  2. 空间固定

    数组的空间一旦在创建过程中确定,空间无法修改。如果想扩容或者缩小,必须创建一个新的数组

  3. 方法很少

    数组的方法都是自己编写实现,体验太差。。Java中对于数组操作的方法太少。

而集合可以解决以上所有的问题:

  1. 集合采用泛型的模式,用户可以指定任意类型进行存储操作
  2. 空间可以在合理范围以内自行扩展,不需要考虑容量问题
  3. 方法很多

2.集合的架构

interface Collection Java中所有集合的总接口

----| interface List List接口,数据存储可重复,有序

--------| class ArrayList

​ 重点 可变长数组

--------| class LinkedList

​ 重点 双向链表模式

--------| class Vector

​ 线程安全的可变长数组

----| interface Set Set接口,数据存储不可以重复,无序

--------| HashSet

​ 底层存储数据的结构是一个哈希表,存储效率,查询效率极高!

--------| TreeSet

​ 底层存储数据的结构是一个平衡二叉树,要求数据必须有比较方式

3.Collection接口下常用的方法

增:

​ boolean add(E e)

​ 添加当前集合约束的指定数据类型的数据

​ boolean addAll(Collection<? extends E> c);

​ 添加另一集合到当前集合,要求添加集合中的元素必须是当前元素的本身或者子类对象

删:

​ boolean remove(Object o);

​ 删除集合中的指定元素,成功返回true,没有找到返回false。若有多个元素,删除第一个。

​ boolean removeAll(Collection c);

​ 删除当前集合与指定集合的交集

​ boolean retainAll(Collection c):

​ 保留当前集合与指定集合的交集

​ void clear();

​ 清空整个集合

查:

​ int size();

​ 有效元素个数

​ boolean isEmpty();

​ 判断当前集合是否为空

​ boolean contains(Object o);

​ 判断指定元素是否存在

​ boolean containsAll(Collection<?> c);

​ 判断传入的集合是否为当前集合的子集

​ Object[] toArray();

​ 返回集合中所有元素所组成的Object类型数组

案例代码:

package com.qfedu.study.collection;

import java.util.ArrayList;
import java.util.Collection;

class Animal {}

class Dog extends Animal {}

class Cat extends Animal {}

public class TestCollection {
	public static void main(String[] args) {
		
		Collection<String> c1 = new ArrayList<String>();
		Collection<String> c2 = new ArrayList<String>();
		
		c1.add("哈哈");
		c1.add("嘿嘿");
		c1.add("嘻嘻");
		c1.add("嗯嗯");

		c2.add(" ");
		
		System.out.println(c1);
		System.out.println("c1有效元素个数:" + c1.size());
		
		c1.remove("哈哈");
		c1.addAll(c2);
		System.out.println(c1);
		
		Object[] obj = c1.toArray();
		System.out.println(obj);
		
		
		Collection<Animal> a1 = new ArrayList<Animal>();
		Collection<Dog> a2 = new ArrayList<Dog>();
		Collection<Cat> a3 = new ArrayList<Cat>();
		
		a1.addAll(a2);
		a1.addAll(a3);
		
		a1.add(new Dog());
		a1.add(new Cat());
		
		
	}
}
/*
输出结果:
[哈哈, 嘿嘿, 嘻嘻, 嗯嗯]
c1有效元素个数:4
[嘿嘿, 嘻嘻, 嗯嗯,  ]
[Ljava.lang.Object;@15db9742
*/

4.迭代器Iterator

迭代器方法:

获取迭代器

​ Iterator iterator();

迭代器使用到的方法:

​ boolean hasNext();

​ 判断当前集合是否可以继续得到元素,继续遍历

​ E next();

	1. 获取迭代器当前指向的元素
	2. 将迭代器指向下一个元素

​ void remove();

​ 删除通过next方法获取的元素

注意:

  1. remove方法只能删除通过next方法获取到的元素
  2. remove方法只能在next方法之后执行
  3. 没有next方法不能使用remove方法
  4. 不建议使用remove方法

案例代码

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class TestIterator {
	public static void main(String[] args) {
		Collection<String> c1 = new ArrayList<String>();
		
		c1.add("哈哈");
		c1.add("嘿嘿");
		c1.add("嘻嘻");
		c1.add("嗯嗯");
		
		Iterator<String> it = c1.iterator();
		System.out.println(c1);
		
		System.out.println("迭代器hasNext()演示:" + it.hasNext());
		System.out.println("迭代器next()演示:" + it.next());
		System.out.println("迭代器remove()演示:");
		
		it.remove();
		System.out.println(c1);
		
		while (it.hasNext()) {
			String string = (String) it.next();
			System.out.println(string);
		}
		
	}
}
/*
输出结果:
[哈哈, 嘿嘿, 嘻嘻, 嗯嗯]
迭代器hasNext()演示:true
迭代器next()演示:哈哈
迭代器remove()演示:
[嘿嘿, 嘻嘻, 嗯嗯]
嘿嘿
嘻嘻
嗯嗯
*/

注意:

对于集合和迭代器而言,集合在内存中的空间是共享资源!

迭代器对于集合是有规划的,集合的每次改变,迭代器也必须改变否则会报错!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值