18-集合

作者: wangfs | 来源:发表于2018-07-15 22:33 被阅读15次

集合的认识与增删改查

1 集合

1.1 什么是集合

存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。

1.2 集合和数组的区别

数组和集合都是容器
数组特点:大小固定,只能存储相同数据类型的数据
集合特点:大小可动态扩展,可以存储各种类型的数据

1.2.1 数组的缺点

存储类型单一的数据容器,操作复杂(数组一旦声明好则不可变)CRUD

1.3集合的分类

集合做什么

  1. 将对象添加到集合中
  2. 从集合中删除对象
  3. 从集合中修改一个对象
  4. 从集合中查找一个对象

也就是增删改查
注意:集合和数组中存放的都是对象的引用而非对象本身
Java工程师对不同的容器进行了定义,虽然容器不同,但是还是有一些共性可以抽取,最后抽取了一个顶层接口,那么就形成了一个集合框架。如何学习呢?当然是从顶层学起,顶层里边具有最共性,最基本的行为。具体的使用,就要选择具体的容器了。为什么?因为不断向上抽取的东西有可能是不能创建对象的,抽象的可能性很大,并且子类对象的方法更多一些。所以是看顶层,创建底层。那么集合的顶层是什么呢?叫做Collection
集合框架体系


19.jpg 20.png
为什么出现这么多集合容器,因为每个容器对数据的存储方式不同,这种存储方法称之为数据结构(data structure)
注意:集合和数组中存放的都是对象的引用
1.4 什么时候该使用什么样的集合
21.png

2 集合类

Collection接口有两个子接口
- List(链表|线性表)
- Set(集)
特点:
Collection中描述的是集合共有的功能(CRUD)
- List可存放重复元素,元素存取是有序的
- Set不可存放重复元素,元素存取是无序的

java.util.Collection
---| Collection     描述所有接口的共性
        ---| List 接口    可以有重复元素的集合
        ---| Set  接口    不可以有重复元素的集合
  • 学习集合对象
    学习Collection中的共性方法,多个容器在不断向上抽取就体现了该体系。发现Collection接口中具有所有容器都具备的共性方法。查阅API时,就可以直接看到该接口中的方法。
    并创建其子类对象对集合进行基本应用。当要使用集合对象中特有的方法,再查看子类具体的内容。
    查看api文档Collection在java.util中(注意是大写Collection)
    注意现阶段遇到的E T之类的类型,需要暂时理解为object,因为涉及到后面学习的泛型。
  • 创建集合对象,使用Collection中的List的具体实现类ArrayList
    Collection coll = new ArrayList();
2.1 Collection接口的共性方法
增加:
      1. add() 将指定对象存储到容器中
                      add方法的参数类型是Object,可以存储任意数据类型
      2. addAll() 将指定集合中的元素添加到调用该方法和集合中
删除:
      3. remove() 将指定的对象从集合中删除
      4. removeAll() 将指定集合中的元素删除
修改:
      5. clear() 清空集合中的所有元素,但是容器还是在的。
判断:
      6. isEmpty() 判断集合是否为空
      7. contains() 判断集合中是否包含指定对象
      8. containsAll() 判断集合中是否包含指定集合
                        使用equals()判断两个对象是否相等
获取:      
      9. int size() 返回集合容器的大小
转换成数组:
     10. toArray() 将集合转换成数组

下面分别用实例进行说明

2.1.1 增加:
package itcast01;

import java.util.Collection;
import java.util.ArrayList;

public class ArrayListDemo {
//增加: add() 将指定对象存储到容器中
    public static void main(String[] args) {
        //接口的多态,ArrayList是Collection接口的实现类。创建了ArrayList实现类的对象coll。
        Collection coll = new ArrayList();
        //向容器中添加元素
        coll.add("计算机网络");
        coll.add("现代操作系统");
        coll.add("数据库原理");
        coll.add("Java编程思想");
    }

}
2.1.2 删除:
package itcast01;

import java.util.Collection;
import java.util.ArrayList;

public class ArrayListDemo {
//增加: add() 将指定对象存储到容器中
    public static void main(String[] args) {
        //接口的多态,ArrayList是Collection接口的实现类。创建了ArrayList实现类的对象coll。
        Collection coll = new ArrayList();

        coll.add("计算机网络");
        coll.add("现代操作系统");
        coll.add("数据库原理");
        coll.add("Java编程思想");
        
        //删除集合中的指定元素
        boolean  remove = coll.remove("Java编程思想");
        System.out.println(remove);//true
        System.out.println(coll);
        
        //删除集合中的全部元素
        boolean removeAll = coll.removeAll(coll);
        System.out.println(coll);

        /*输出结果:
         * true
         * [计算机网络, 现代操作系统, 数据库原理]
         * []
         * */
    }

}
2.1.3 修改
package itcast.demo02;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo {

    public static void main(String[] args) {
            Collection coll = new ArrayList();
            coll.add("java编程");
            coll.add("操作系统原理");
            coll.add("计算机网络");
            coll.add("数据库原理");
            System.out.println(coll);
            //Collection集合的修改,使用方法clear
            coll.clear();
            System.out.println("*******分割线********");
            System.out.println(coll);

    }

}
输出:
[java编程, 操作系统原理, 计算机网络, 数据库原理]
*******分割线********
[]
2.1.4 判断,获取元素个数,转换成数组
package itcast.demo02;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo {

    public static void main(String[] args) {
            Collection coll = new ArrayList();
            coll.add("java编程");
            coll.add("操作系统原理");
            coll.add("计算机网络");
            coll.add("数据库原理");
            System.out.println(coll);
            //判断,判断集合中是否包含指定对象
            
            //首先应该判断一下集合是否为空
            if(!coll.isEmpty()) {
                boolean b = coll.contains("网页制作三剑客");
                boolean b1 = coll.contains("计算机网络");
                System.out.println(b);
                System.out.println(b1); 
            }
            //获取集合元素的个数
            System.out.println(coll.size());
            //将集合转换为数组,注意此处的返回值类型是Object,因为上面的集合coll并没有指定存储的数据类型。
            Object[] s = coll.toArray();
            //打印数组
            for(int i=0 ; i<coll.size(); i++) {
                System.out.println(s[i]);
            }
    }

}

输出:
[java编程, 操作系统原理, 计算机网络, 数据库原理]
false
true
4
java编程
操作系统原理
计算机网络
数据库原理
2.1.5 练习:集合中添加自定义对象
package itcast.demoLX;

public class Person {
    private String name;
    private int age;
    
    //重写Person类的toString方法
    public String toString() {
        //System.out.println("姓名:"+name+" "+"年龄:"+age);
        return "姓名:"+name+" "+"年龄:"+age;
    }
    /* 重写equals方法,如果不重写的话,调用Object类的equals方法,判断内存地址,为false
     *      如果是Person类对象,并且姓名和年龄形同就返回true
     */
    public boolean equals(Object obj) {
        if(!(obj instanceof Person)) {
            return false;
        }
        Person p = (Person) obj;
        return this.name.equals(p.name) && this.age == p.age;
    }
    //满参构造器
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    public String getName() {
        return this.name;
    }
    
    public int getAge() {
        return this.age;
    }
}

//测试
package itcast.demoLX;

import java.util.ArrayList;
import java.util.Collection;

public class TestDemo {

    public static void main(String[] args) {
        //创建集合对象
        Collection<Person> coll = new ArrayList<Person>();
        //向集合中添加元素
        coll.add(new Person("张三",20));
        coll.add(new Person("李四",21));
        coll.add(new Person("王二",22));
        coll.add(new Person("赵六",23));
        coll.add(new Person("钱五",24));
        //打印集合
        System.out.println(coll);//打印出来的都是元素的内存地址,也就是调用的是Object的toString方法,所以我们需要对Person重写toString方法
    }

}

相关文章

网友评论

      本文标题:18-集合

      本文链接:https://www.haomeiwen.com/subject/cgrmpftx.html