JavaCollection集合:概述、体系特点、常用API、遍历方式

一、集合概述

集合和数组都是容器

数组

特点:数组定义完成并启动后,类型确定、长度固定。

劣势:在进行增删数据操作的时候,数组是不太合适的,增删数据都需要放弃原有数组或者移位。

使用场景:当业务数据的个数是固定的,且都是同一批数据类型的时候,可以采取定义数组存储。

集合

集合是Java中存储对象数据的一种容器。

特点:集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像是一个气球

优势:非常适合做增删数据的操作。

使用场景:当业务数据的个数不固定,且需要进行增删数据的时候,可以采取定义集合存储。

注意:集合中只能存储引用类型数据,如果要存储基本类型数据可以选用基本类型对应的包装类。

总结

数组和集合的元素存储的个数问题?

  • 数组定义后类型确定,长度固定;
  • 集合类型可以固定,大小可变。

数组和集合存储元素的类型问题?

  • 数组可以存储基本类型和引用类型的数据;
  • 集合只能存储引用类型的数据,如果想要存储解基本类型的数据,可以选用基本类型对应的包装类。

数组和集合适合的场景?

  • 当业务数据的个数确定、类型确定的时候,可以采取定义数组存储;
  • 当业务数据的个数不固定,且需要对数据进行增删操作的时候,可以采取定义集合存储。

二、Collection集合的体系特点

1.集合类体系结构

 collection单列集合,每个元素(数据)只包含一个值。

 Map双列集合,每个元素包含两个值(键值对)。

注意:前期先掌握Collection集合体系的使用。

2.Collection集合体系

 3.Collection集合特点

List系列集合:添加的元素是有序的,可重复的,有索引

ArrayList、LinkedList

Set系列集合:添加的元素是无序的,不重复的,无索引

Hash Set:无序不重复无索引

LinkedHashSet:有序不重复无索引

TreeSet:按大小默认升序排序不重复无索引

    public static void main(String[] args) {
//        List系列:有序可重复有索引
        Collection arr = new ArrayList();
        arr.add("test");
        arr.add("test");
        arr.add(1);
        arr.add(1);
        System.out.println("List系列:"+arr);
//        Set系列:无序不重复无索引
        Collection hashSet = new HashSet();
        hashSet.add("test");
        hashSet.add("test");
        hashSet.add(11);
        hashSet.add(11);
        System.out.println("Set系列:"+hashSet);
    }

控制台输出结果:

4.集合对于泛型的支持

集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型

Collection<String> lists = new ArrayList<String>();
Collection<String> lists1 = new ArrayList<>();	// JDK 1.7开始后面的泛型类型申明可以省略不写

集合和泛型都只支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

如果集合中要存储基本类型的数据,需要使用对应的包装类

Collection<Integer> lists1 = new ArrayList<>();		// 存储基本类型的数据需要使用对应的包装类
Collection<Double> lists2 = new ArrayList<>();		// 存储基本类型的数据需要使用对应的包装类
    public static void main(String[] args) {
//        List系列:有序可重复有索引
        Collection arr = new ArrayList();
        arr.add("test");
        arr.add("test");
        arr.add(1);
        arr.add(1);
        System.out.println("List系列:"+arr);
//        Set系列:无序不重复无索引
        Collection hashSet = new HashSet();
        hashSet.add("test");
        hashSet.add("test");
        hashSet.add(11);
        hashSet.add(11);
        System.out.println("Set系列:"+hashSet);

//        集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型
//        Collection<String> list01 = new ArrayList<>(String);在jdk7后,右边的类型申明可以忽略不写
        Collection<String> list01 = new ArrayList<>();
        list01.add("java");
        list01.add("java");
        list01.add("李白");
        list01.add("汪汪头");
        list01.add("汪汪头");
        System.out.println(list01);

        Collection<String> list02 = new HashSet<>();
        list02.add("java");
        list02.add("java");
        list02.add("李白");
        list02.add("汪汪头");
        list02.add("汪汪头");
        System.out.println(list02);

//        如果集合中要存储基本类型的数据,需使用对应的包装类来申明集合类型
        Collection<Integer> list03 = new ArrayList<>();
        list03.add(15);
        list03.add(15);
        list03.add(256);
        list03.add(256);
        list03.add(512);
        System.out.println(list03);
        
        Collection<Integer> list04 = new ArrayList<>();
        list04.add(15);
        list04.add(15);
        list04.add(256);
        list04.add(256);
        list04.add(512);
        System.out.println(list04);
    }

 总结

1.集合代表是?

Collection接口。

2.Collection集合分了哪两大常用的集合体系?

List系列的集合体系:添加的元素有序、可重复、有索引;

Set系列的集合体系:添加的元素无序、不重复、无索引。

注意:Set系列的集合,有些实现类可能会有些改变

3.如何约定集合存储数据的类型,需要注意什么?

集合支持泛型;

集合和泛型不支持基本数据类型,只支持引用数据类型。

三、Collection集合的常用API

1.Collection集合

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

2.Collection的API

方法说明
public boolean add(E e)把给定的对象(元素)添加到当前集合中
public void clear()清空集合中所有的元素
public boolean remove(E e)把给定的对象(元素)在当前集合中删除
public boolean contains(Object o)判断当前集合是否为空
public int size()返回集合中元素的个数
public boolean isEmpty()判断当前集合是否为空
public Object[]toArray()把集合中的所有元素,存储到数组中
    public static void main(String[] args) {
        //添加元素
        Collection<String> list1 = new ArrayList<>();
        list1.add("java");
        list1.add("java");
        list1.add("CTRL");
        list1.add("三国演义");
        System.out.println("List系列list1集合:"+list1);

        //添加元素:因为set系列的集合:无序不重复无索引
        Collection<Integer> list2 = new HashSet<>();
        list2.add(123);
        list2.add(123);//false
        list2.add(321);
        System.out.println("Set系列list2集合:"+list2);
        System.out.println();

        //把给定的对象在当前集合中删除,成功为true,失败为false
        System.out.println("从list1集合中删除“CTRL”是否成功:"+list1.remove("CTRL"));
        System.out.println("List系列list1集合:"+list1);
        System.out.println("从list2集合中删除“123”是否成功:"+list2.remove(123));
        System.out.println("Set系列list2集合:"+list2);
        System.out.println();

        //判断当前集合是否为空,为空true,不为空false
        System.out.println("list1集合是否为空:"+list1.isEmpty());
        System.out.println("list2集合是否为空:"+list2.isEmpty());
        System.out.println();
        //判断当前集合中是否包含给定的对象,包含true,否则false
        System.out.println("list1集合中是否包含“java”:"+list1.contains("java"));
        System.out.println("list2集合中是否包含“321“:"+list2.contains(321));
        System.out.println();

        //返回集合中元素的个数
        System.out.println("list1集合中有"+list1.size()+"个元素");
        System.out.println("list2集合中有"+list2.size()+"个元素");
        System.out.println();

        //把集合中的所有元素,存储到数组中
        Object[] arr1 = list1.toArray();
        Object[] arr2 = list2.toArray();
        System.out.println();
        System.out.println("list1集合"+list1);
        System.out.println("list1存储到数组arr1后:"+ Arrays.toString(arr1));
        System.out.println("list2集合"+list2);
        System.out.println("list2存储到数组arr2后:"+Arrays.toString(arr2));
        System.out.println();

//        清空集合中所有的元素
        list1.clear();
        System.out.println("list1集合:"+list1);
        System.out.println("list2集合:"+list2);
        System.out.println();

//        判断当前集合是否为空,为空true,否则false
        System.out.println("list1集合是否为空:"+list1.isEmpty());     //true
        System.out.println("list2集合是否为空:"+list2.isEmpty());     //false
        System.out.println();

控制台输出结果:

四、Collection集合的遍历

1.迭代器

遍历就是一个一个的把容器中的元素访问一遍。

迭代器在Java中的代表是iterator,迭代器是集合的专用遍历方式。

(1)Collection集合获取迭代器

方法说明
Iterator<E> iterator()返回当前集合中元素的迭代器,该迭代器对象默认指向当前集合的0索引

(2)Iterator中的常用API

方法说明
boolean hasNext()询问当前位置是否有元素存在,存在返回true,否则返回false
E next()获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界

总结

1.迭代器的默认位置在哪里?

默认指向当前集合的索引0

2.迭代器如果取元素月结会出现什么问题?

会出现NoSuchElementException异常

2.foreach(增强版的for循环)

foreach:既可以遍历集合也可以遍历数组

它是jdk5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。

实现Iterable接口的类才可以使用Iterator迭代器和foreach,Collection接口已经实现了Iterable接口


foreach格式:

for(元素数据类型 变量名 : 数组或者Collection集合) {
	// 在此处使用变量即可,该变量就是元素
}
    public static void main(String[] args) {
//        创建collection集合,添加几个元素
        Collection<String> name = new ArrayList<>();
        name.add("双面龟");
        name.add("泡泡");
        name.add("阿酷");
        name.add("小美美");
        System.out.println(name);
//       使用foreach遍历collection集合
        for (String ele : name){
            System.out.println(ele+"");
        }
        System.out.println("-------");
        
//        创建一个数组,添加几个元素
        int[]scores = {100,456,13,78};
        System.out.println(Arrays.toString(scores));
//        使用foreach遍历数组
        for (double score : scores){
            System.out.println(score+"\t");
        }
    }

控制台输出结果: 

 3.Lambda表达式

得益于jdk8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

方法说明
defaulf void forEach(Consumer<?super T action)集合Lambda遍历集合
    public static void main(String[] args) {
        //        创建collection集合,添加几个元素
        Collection<String> name = new ArrayList<>();
        name.add("双面龟");
        name.add("泡泡");
        name.add("阿酷");
        name.add("小美美");
        System.out.println(name);
//
        Lambda原形式
//        name.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
//
        简化
//        name.forEach(s -> {
//            System.out.println(s);
//        });
//        进一步简化
        name.forEach(s -> System.out.println(s));
    }

控制台输出结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值