Java初学之集合(一)

Java初学之集合(一)

概述

  • 为什么会出现集合类?
    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

  • 数组和集合类同是容器,有何不同?
    数组虽然可以存储对象,但是长度是固定的;集合长度是可变的。
    数组中可以存储基本数据类型,集合只能存储对象。

  • 集合类的特点
    集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象。

体系

  • 因为容器中数据结构不同,容器有很多种,不断的共性功能抽取,形成了集合体系,集合框架顶层就称为Collection接口。
  • Collection接口中定义了集合的基本功能

Collection接口中的共性方法

  • 添加
    • boolean add(Object obj):一次添加一个
    • boolean addAll(Collection c):将指定容器中所有元素添加
  • 删除
    • void clear();
    • boolean remove(Object obj);
    • boolean remove(Object obj);
    • boolean retainAll(Collection c);
  • 获取长度
    • int size();
  • 判断
    • boolean isEmpty();
    • boolean contains(Object obj);
    • boolean containsAll(Collection c);
  • 将集合转为数组
    • toArray();
    • toArray([]);
  • 取出元素
    • Iterator iterator();
    • 获取集合中元素上迭代功能的迭代器对象;
    • 迭代:取出元素的一种方式
    • 迭代器:具有迭代功能的对象
    • 迭代器对象不需要new,可直接通过iterator()获取。
    • 迭代器是取出集合中元素的共有方法。

List和Set的区别

  • List:有序(存入的顺序和取出的顺序一致),有索引,允许重复元素。
  • Set:不允许重复元素。

LIst中的常见方法


    • add(index,element);

    • remove(index);

    • set(index,element);

    • int indexOf(element);
    • element get(index);
  • 特有的迭代器
    • ListIterator可以实现迭代过程中的增删改查

List集合的子类

  • Vector:数据结构是数组,数组是可变长度的(不断new新数组并将原数组元素复制到新数组)线程是同步的,增删和查询慢。
  • ArrayList:数据结构是数组,长度可变,线程不同步,替代了Vector,增删速度不快,查询快。
  • LinkedList:链表结构,线程不同步,增删速度快,查询慢。

Set集合的子类

  • HashSet:哈希(散列)表结构,不同步
    • 不允许存储重复元素,因为会发生查找的不确定性,不保证存入和取出的顺序一致。比数组的查询效率 高。
    • 当哈希算法得到两个元素值相同时,称为哈希冲突。冲突后,需要对元素进一步判断,判断元素内容,equals方法。
    • 哈希算法在判断元素是否相同是,依据hashCode方法。如果哈希重复(哈希值相同),再用equals方法判断元素。如果equals方法返回true,不存;返回false,存储。
    • 如何保证元素的唯一性?
      • 元素必须覆盖hashCode方法和equals方法。覆盖hashCode方法是为了根据元素自身的特点确定哈希值。
      • 覆盖equals方法是为了解决哈希冲突。
  • TreeSet:二叉树数据结构,可以对元素进行排序,不同步
    • 如何保证元素的唯一性?
      • 参考的就是比较方法的返回值:如果返回值是0,就是重复元素,否则不是。
      • 排序方式:需要元素具备比较功能,所以元素需要实现Comparable接口,覆盖CompareTo方法。
    • 需求中也有这样一种情况,元素具备的比较方法不是所需要的,也就是说不想按照自然排序的方法,而是按照自定义的排序方法,对元素进行排序。而且存储到TreeSet中的元素万一没有比较方法,该如何排序呢?这是就只能使用第二种比较方式:让集合具备比较功能。实现Comparator接口,覆盖Compare方法,将Comparator接口的对象作为参数传递到TreeSet集合构造函数。比较器更为灵活。

集合名称阅读技巧:前缀是数据结构名。后缀是所属体系名

  • ArrayList:数组结构,查询快,可以有重复元素。
  • LinkedList:链式结构,增删快。
  • HashSet:查询速度快,不保证有序,不允许重复,需要覆盖hashCode方法和equals方法
  • TreeSet:二叉树,可以排序,就要想到两种比较方式:一种是自然排序Comparable,一种是比较器Comparator
  • LinkedHashSet:链表+哈希表,可以实现有序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值