为什么使用集合?
开发中会使用大量相同数据类型的情况,如果使用数组来解决问题
1.数组能够使用的方法非常少,功能方法需要程序员自己完成
2.数据类型单一化,不支持多种情况
3.数组容量一旦确定不容易更改
而集合解决了以上问题:
1.方法多种多样,基本功能完善
2.数据类型支持多样化,但是又不失数据类型一致要求
3.容量可以更改,且不用开发者操心
集合架构
Java中集合的【总接口】Collection<E>,Java中所有和集合有关的内容都是
Collection<E>接口的子类或者实现类
interface Collection<E>包含:
interface List<E> List接口有序可重复,而List接口包含:
class ArrayList[重点]可变长数组结构
class LinkedList[重点] 双向链表结构
class Vector 线程安全的ArrayList,如果不考虑安全问题,建议使用ArrayList
interface Set<E> Set接口,无序不可重复,包含:
HashSet<E> 底层存储数据的方式是采用哈希表的方式
TreeSet<E> 底层存储数据的方式是采用平衡二叉树的方式
Collection<E>接口下的常用方法
增:
boolean add(E e);
存入元素到当前集合对象中,这里要求的数据类型是E类型,也就是泛型对应的具体数据类型
boolean addAll(Collection<? extends E> c); 把c添加到其他集合中
? extends E : 泛型的上限,要求集合C中,存储的元素要么是E类型,要么是E类型的子类
class dog extends Animals;
class cat extends Animals;
?就是dog、cat
E就是Animals
删:
void clear();
清空整个集合
boolean remove(Object obj);
删除集合中的指定元素
boolean removeAll(Collection<?> c);
删除两个集合的交集
boolean retainAll(Collection<?> c);
保留两个集合的交集
查:
int size();
返回集合中有效元素的个数
boolean contains(Object obj);
判断指定元素在当前集合中是否存在
boolean containsAll(Collection<?> c);
判断集合c是不是当前集合的子集合
部分代码实现
package com.wcc.a;
import java.util.ArrayList;
import java.util.Collection;
/**
* @Author kk
* @Date 2020/3/14 20:10
*/
public class Demo1 {
public static void main(String[] args) {
/*
因为Collection<E>使用一个接口,接口没有自己的类对象
这里使用Collection接口的实现类来完成演示过程ArrayList<E>
*/
//接口的引用指向接口的类对象,多态
Collection<String> c = new ArrayList<>();
c.add("小江");
c.add("小坤");
c.add("小江江");
c.add("小坤坤");
System.out.println(c);
Collection<String> c1 = new ArrayList<>();
c1.add("小j");
c1.add("小k");
c1.add("小kk");
c.addAll(c1);
System.out.println(c);
// c.remove("小j");
// System.out.println(c);
// c.removeAll(c1);
// System.out.println(c);
// c.retainAll(c1);
// System.out.println(c);
System.out.println(c.size());
System.out.println(c.contains("小坤"));
System.out.println(c.contains("小王"));
System.out.println(c.containsAll(c1));
}
}
未完待续....