一.集合与数组

1.集合与数组存储数据概述

  • 集合与数组都是对多个数据进行存储操作的结构,简称Java容器

说明:

    此时的存储主要是指内存层面的存储,不涉及持久化存储

2.数组存储的特点

  • 数组一旦初始化后,长度确定,不可更改
  • 数组一定定义好之后,元素的数据类型确定,因此只能操作指定数据类型的数据

如:    String [] arr;

        int [] arr1;

       Object [] arr2;

3.数组存储的弊端

  • 初始化后,长度不可修改
  • 数组中提供的方法有限,对添加,删除,插入等操作非常不方便,效率不高
  • 获取数组中实际元素,没有现成的属性或方法
  • 数组对无序,不可重复数据不可操作

二.集合概念引入

  • Collection是一个容器,Array也是一个容器
  • Array指定了存储空间,且是空间连续,长度不可变的容器

Array有索引值,查询方便,但是插入,删除缓慢

eg:

   用户注册时

     User对象 --> 数组(长度为固定值) --> 存储满之后需要重新创建数组

三.为什么要有集合?

  • 实际开发中,数据数量是变化的,这时就需要一个动态容器来存储数据
  • 不同数据结构不同,因此,java中就提供了许多不同类型的集合类

四.集合API

集合概述

   集合就是容器,以不同结构来存储数据

      操作有 增,删,改,查

集合体系概述

Java集合框架由许多接口,抽象类,具体类组成,位于java,util包中

java定义一个集合 java如何定义集合_数据结构

五.集合与泛型的联系

Collection

  • 集合可以使用泛型向集合中传入参数(数据类型),默认为Object类型,
  • 集合必须存储引用类型,因此存储时使用自动装箱转换为包装类,但如果需要向下转型时就会变得很复杂
  • 此时,引出泛型的概念,使一个集合存储一类数据
Collection<String> c = new ArrayList<String>();

六.Collection中的常用方法  

 ①添加元素    

c.add("a");
        c.add("b");
        c.add("c");
        c.add("a");
        c.add("d");
        System.out.println(c);

②清空集合

c.clear();
     System.out.println(c);

③删除指定的元素,且只删除第一次出现的

System.out.println(c.remove("a"));

④判断是否包含指定元素

System.out.println(c.contains("d"));

⑤判断集合是否为空

System.out.println( c.isEmpty());

⑥获取集合长度

System.out.println(c.size());

⑦转换类型

Object[] objects = c.toArray();     //默认转换为Object类
        System.out.println(Arrays.toString(objects));

        String[] strings = c.toArray(new String[c.size()]);
        System.out.println(Arrays.toString(strings));

⑧XXXAll()

Collection<String> c = new ArrayList<String>();

        c.add("a");
        c.add("b");
        c.add("c");
        c.add("d");

        Collection<String> c1 = new ArrayList<String>();

        c1.add("a");
        c1.add("b");
        c1.add("c");

        //添加后面集合中的所有元素到前面集合
        System.out.println(c.addAll(c1));
        System.out.println(c);

        //删除c1在c中的内容
        System.out.println(c.removeAll(c1));
        System.out.println(c);

        //判断是否包含所有,包含所有则返回true
        System.out.println(c.containsAll(c1));
        System.out.println(c);

        //只保留两集合中都有的部分,若值发生变化,则返回true;值不发生变化,则返回false
        System.out.println(c.retainAll(c1));
        System.out.println(c);