什么是集合
:
集合的英文名称是Collection,
是用来存放对象的数据结构,而且长度可变,其实集合就相当于一个容器,我们想存很多个数据;
集合与数组的区别
第一点
首先集合和数组相同之处都是存放数据,集合类与数组最主要的不同之处是,数组的长度是固定的,集合的长度是可变的,
第二点
而数组的访问方式比较单一,插入/删除等操作比较繁琐,而集合的访问方式比较灵活,主要是因为数组只能通过下标取想要的数据,但是集合去有很多个方法
Collection接口层次结构 中的根接口,接口不能直接使用,但是该接口提供了添加元素/删除元素/管理元素的父接口公共方法.
由于List接口与Set接口都继承了Collection接口,因此这些方法对于List集合和Set集合是通用的.
ArrayList子类数据有下标,有序,可重复
内部是用数组结构存放数据,封装数组的操作,每个对象都有下标
内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
查询快,增删慢;
查询快,增删慢
原理:
第一步
第二步
第三步
内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
第一次扩容10,以后每次都扩容原容量的1.5倍,扩容通过位运算右移动1位。
LinkedList子类底层是链表
增删快,查询慢
Collection方法速查表
方法 | 方法描述 |
---|---|
add | 将指定的对象添加到集合中 |
isEmpty() | 判断当前集合是否为空 |
size | 返回此集合的元素数 |
contails() | 判断集合是否包含指定的元素 |
package com.biyi;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
//本类用来测试collection接口
public class Aspct {
public static void main(String[] args) {
//创建collection接口相关对象
//Collection collection=new Collection();//在这个地方为什么回报错;因为接口不能实例化
//在collection里面什么类型都可以存储,所以在这里需要添加范型
//那么我们想要在这里存储一个类型的数据,但是在范型里面不能使用基本类型,必须要用到引用类型
/*
* 在这里是范型用来约束集合中的元素类型,但是这里的范型只能写引用类型,不能写基本类型
*
* */
Collection<Integer> collection=new ArrayList<>();
//测试常用的方法
collection.add(100);//因为我们在new arrlist的时候约束了integer类型,所以,在这里我们只能存储integer类型的数据
collection.add(200);
collection.add(300);
collection.add(400);
System.out.println(collection);
//collection.clear();//【】清空集合中的元素
// System.out.println(collection); 我们在这里注释掉不然的话就一直会有一个空集合
System.out.println(collection.contains(200));//这个方法是是否包含集合中的元素,在这里返回的是boolean的true
System.out.println(collection.hashCode());//这个方法是返回对应的集合的hash值
System.out.println(collection.isEmpty());//判断这个集合是否为空
System.out.println(collection.remove(100));//在这里要注意这个是移除,返回值的结果是boolean类型
System.out.println(collection);//如果我们细数那个运送看一下这个集合的元素是否被移除那么我们可以打印一下
System.out.println(collection.size());//获取集合中的个数,类似与集合的大小
System.out.println(collection.equals(200));//判断集合与200是否相等
System.out.println(collection.toArray());
System.out.println(Arrays.toString(collection.toArray()));//需要将集合转换为数组那么就需要arrays
//System.out.println();这个代码只是讲数据打印到了控制台上,但是我们如何真正取到里面的数据
/*
* 迭代器
* 1,首先是获取集合的迭代器,
* 2,判断集合是否有下个元素 it.hashnext
* 3,获取当前迭代到的元素next
*
* */
Iterator<Integer> it = collection.iterator();//获取集合的迭代器
while (it.hasNext()){//这是一个boolean类型的返回值
Integer num = it.next();
System.out.println(num);
}
}