集合即容器!

集合即容器!

开发和学习中需要时刻和数据打交道,如何组织这些数据是我们编程中重要的内容。我们一般通过“容器”来容纳和管理数据。事实上,我们前面所学的数组就是一种容器,可以在其中放置对象或基本类型数据。

1. 数组

数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。

数组的劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。比如:我们在一个用户管理系统中,要把今天注册的所有用户取出来,那这样的用户有多少个?在写程序时是无法确定的。因此,在这里就不能使用组。

==> 基于数组并不能满足我们对于“管理和组织数据的需求”,所以我们需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对象。 这就是我们今天要学习的容器。容器(Collection)也称之为集合

集合:
存放对象的容器
1. 只能用于存放对象
Java中每一种基本数据类型都有对应引用类型
2. 集合存放的是多个对象的引用,对象本身还是存放在堆中
3. 集合可以存放不同类型,不限数量的数据类型

2. 容器的结构

2.1 结构图

单例集合: 将数据一个一个的进行存储。

双例集合:基于Key与Value的结构存储数据。

在这里插入图片描述


3. Collection接口

Collection是单例集合类的顶级接口。它提供对集合对象进行基本操作的通用接口方法。它的直接继承接口有List,Set和Queue.

Collection 接口中的抽象方法

方法 说明
boolean add(Object element) 增加元素到容器中
boolean remove(Object element) 从容器中移除元素
boolean contains(Object element) 容器中是否包含该元素
int size 容器中元素的数量
boolean isEmpty() 容器是否为空
void clear 清空容器中所有元素
Iterator iterator() 获得迭代器,用于遍历所有元素
boolean containsAll(Collection c) 本容器是否包含c容器中的所有元素
boolean addAll(Collection c) 将容器c中所有元素增加到本容器
boolean removeAll(Collection c) 移除本容器和容器c中都包含的元素
boolean retainAll(Collection c) 取本容器和容器中都包含的元素,移除非交集元素
Object[] toArray() 转化成Object 数组

由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。

4. List 接口介绍

4.1 List 的特点

  • 有序:有序(元素存入集合的顺序和取出的顺序一致)。List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。

  • 可重复:List允许加入重复的元素。更确切地讲,List通常允许满足e1.equals(e2) 的元素重复加入容器。

4.1 List 的常用方法

除了Collection接口中的方法,List多了一些跟顺序(索引)有关的方法,参见下表:

方法 说明
void add (int index, Object element) 在指定位置插入元素,以前元素全部后移一位
Object set (int index,Object element) 修改指定位置的元素
Object get (int index) 返回指定位置的元素
Object remove (int index) 删除指定位置的元素,后面元素全部前移一位
int indexOf (Object o) 返回第一个匹配元素的索引,如果没有该元素,返回-1.
int lastindexOf (Object o) 返回最后一个匹配元素的索引,如果没有该元素,返回-1

4.3 ArrayList 容器类

ArrayList 是 List 接口的实现类。是 List 存储特征的具体实现。所以能够实现Collection和List接口的方法。 ArrayList底层是用数组实现的存储。

特点:查询效率高,增删效率低,线程不安全!

Vector 线程是安全的(不推荐使用)

package day04;
import java.util.ArrayList;
import java.util.List;
public class Test3 {
   
	public static void main(String[] args) {
   
	//直接new一个ArrayList类
		List<String> list = new ArrayList<String>();
        //往容器添加元素
		list.add("5");
		list.add("2");
		list.add("0");
		System.out.println(list.get(2));//允许使用重复元素,可通过索引来访问指定位置的元素
		
		//默认按元素添加位置设置元素索引
        //按索引在指定位置添加:list.add(0, "6");
		list.add(0, "6");
		System.out.println(list);
		
		List<String> l = new ArrayList<String>();
		l.add("123");
		l.add("456");
        //插入集合
		list.addAll(l);
        //指定位置插入集合:list.addAll(2, l);
		list.addAll(2, l);
		System.out.println(list);
		System.out.println(list.indexOf("5"));//第一个下标:list.indexOf("5")
		System.out.println(list.lastIndexOf("5"));//最后一个下标:list.lastIndexOf("5")
		list.set(1, "你好");//修改指定元素:list.set(1, "你好");
		System.out.println(list);
		//截取指定位置元素:List<String> sub = list.subList(1, 2);
		List<String> sub = list.subList(1, 2);
		System.out.println(sub);
		System.out.println(list.size());//指定数组的长度
	}
}

4.5 Vector 容器类

  • Vector底层是用数组实现的,相关的方法都加了同步检查,因此“线程安全效率低”比如,indexOf方法就增加了synchronized 同步标记。

  • Vector的使用与Arraylist是相同的,因为他们都实现了List 接口,对 List 接口中的抽象方法做了具体实现。

    4.5.1.Stack 容器
  • Stack栈容器是Vector的一个子类它实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值