Java(Collection单列集合)

2021-02-27

为什么学习集合?

Java时面对对象的语句,对对象会经常的操作,容器可以存储对象,比较操作对象的元素增删改查

数组 存储对象 长度固定不变 增加和删除操作麻烦
StringBuilder和StringBuffer只能存储字符串对象

学习集合关注点

1、是否唯一
2、是否是可排序【存储时保持是否有序】
3、是否可以存储null元素
4、是否效率高【集合的数据结构:数组,栈,链表,队列,哈希表,二叉树等】
5、是否可以重复【顺序存储,元素是否重复】

一、集合

1、集合概念

 是Java中提供的一种容器,可以用来存储多个不同类型的数据;

2、数组 & 集合 的区别

数组:长度都是固定的,存储的同一类型的元素;
集合:长度可变的,存储多个不同类型的对象(引用类型或者包装类型);

3、集合的体系结构图

二、Collection单列集合

1、概念

java.util.Collection接口
  是所有单列集合的父接口(顶层父类接口)

2、Collection常用方法

Collection中定义了单列集合List和Set通用的方法,方法如下:
  import java.util.ArrayList;
  import java.util.Collection;

  public class CollectionDemo{
      public static void main(String[] args) {
          //使用实现类ArrayList创建集合对象(多态)
          Collection<String> c = new ArrayList<>();
  //增
          //boolean add(E e) 向集合中添加元素
          c.add("张三");
          c.add("李四");
          c.add("王五");
          c.add("赵六");
          System.out.println(c);//[张三, 李四, 王五, 赵六]
  //删
          //boolean remove(Object o)  //移除集合中某个元素
          c.remove("李四");
          System.out.println(c);//[张三, 王五, 赵六]

          //void clear() 移除集合中的所有元素
          c.clear();//[]

  //判断
          //boolean isEmpty() 判断集合是否为空,空则返回 true。
          System.out.println(c.isEmpty());//true

          //boolean contains(Object o)判断集合中是否包含指定的元素,是则返回 true。
          c.contains("李四");//false

  //获取
          //int size() 获取集合的长度。
          System.out.println(c.size());//0

  //转换
          //Object[] toArray()将集合转换为数组。
          Object[] arr = c.toArray();
          for (int i = 0; i <arr.length ; i++) {//遍历数组
              System.out.println(arr[i]);
          }

      }
  }

3、集合元素去重复

存储是有顺序的,需要去重复,如何去重?

看代码,懂知识;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

//去重
public class Test1 {
    public static void main(String[] args) {
    Collection c = new ArrayList();
    c.add(new Student("张三",28));
    c.add(new Student("李四",28));
    c.add(new Student("张三",28));
    c.add(new Student("张三",18));
    //新建一个新的集合
    //遍历老的集合,在老的集合里面查找没有元素可以添加到新的集合里面
    //新的集合里面包含有这个老的集合元素,如果老的集合在添加新的集合里面的时候
    //如果没有包含集合元素 ,就说明可以添加老的集合元素

    Collection newC = new ArrayList();//新的集合
    //遍历老集合
    for (Object obj : c) {
        if(!newC.contains(obj)){//判断新集合里面的元素是否包含老集合的元素
            newC.add(obj);//没有就添加进新元素
        }
    }
    //遍历输出新集合
    //foreach遍历集合,底层时迭代器
    for (Object obj: newC) {//Object是迭代类型 obj是名称 : newC是需要遍历的数组或者集合
        System.out.println(obj);//obj相当于arr[i]
    }
  }
}
class  Student{

    private String name;
    private  Integer age;

    public Student() {
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
  //需要重写equals,用于比较两个对象的内容是否相同
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(name, student.name) &&
                Objects.equals(age, student.age);
    }

    @Override
    public int hashCode() {
          return Objects.hash(name, age);
    }
  //需要重写toString方法,不然会打印地址
    @Override
    public String toString() {
        return "Student{" +
              "name='" + name + '\'' +
            ", age=" + age +
            '}';
    }
}`
posted @ 2021-02-27 10:19  一名初学者  阅读(181)  评论(0)    收藏  举报