zoukankan      html  css  js  c++  java
  • 集合

    有些人可能不知道我们为什么要用到集合,不是要数组吗?

    在写程序的时候,数组有时候虽然可以替代集合,但数组相对于集合有一个很大的缺点。数组在存储数据的时候有一个很大的缺点,那就是必须定义数组的长度,而集合的长度是可变的。在java编程中,经常需要在内存中保存大量的,各种类型的数据,使用数组很不便捷,我们就需要用集合来完成我们的目的。

    集合的特点:

    1.用于存储对象的容器;

    2.集合长度是可变的;

    3.集合中不可以存储基本数据类型的值。

    集合框架的顶层是collection接口,它常见方法有:

    1,添加。
    boolean add(Object obj):
    boolean addAll(Collection coll):


    2,删除。
    boolean remove(object obj):
    boolean removeAll(Collection coll);
    void clear();

    3,判断:
    boolean contains(object obj):
    boolean containsAll(Colllection coll);
    boolean isEmpty():判断集合中是否有元素。

    4,获取:
    int size():
    Iterator iterator():取出元素的方式:迭代器。

    该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
    所以该迭代器对象是在容器中进行内部实现的。
    对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可, 也就是iterator方法。

    可能有人不知道什么是Iterator,其实Iterator就是一个接口,Iterator接口就是对所有的Collection容器进行元素取出的公共接口。

    collection下的list,set,和map:

    list:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。

    List:特有的常见方法:有一个共性特点就是都可以操作角标。

    1,添加
    void add(index,element);
    void add(index,collection);
    2,删除;
    Object remove(index):
    3,修改:
    Object set(index,element);
    4,获取:
    Object get(index);
    int indexOf(object);
    int lastIndexOf(object);
    List subList(from,to);
    list集合是可以完成对元素的增删改查。

    List下的子集:
    1.Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
    2.ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
    3.LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

    set:元素不能重复,无序.

    Set接口中的方法和Collection一致。

    set下的子集:

    1.HashSet: 内部数据结构是哈希表 ,是不同步的。

    是通过对象的hashCode和equals方法来完成对象唯一性的。
    如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
    如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
    如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
    记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。

    2.TreeSet:可以对Set集合中的元素进行排序。是不同步的。

    判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。

    if(this.hashCode()== obj.hashCode() && this.equals(obj))

    哈希表确定元素是否相同
    1,判断的是两个元素的哈希值是否相同,如果相同,在判断两个对象的内容是否相同。
    2,判断哈希值相同,其实判断的是对象的hashCode的方法。判断内容相同,用的是equals方法

    注意:如果哈希值不同,是不需要判断equals。

    map:Map接口映射唯一关键字到值。关键字(key)是以后用于检索值的对象。给定一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它。

    map下的三大子集:

    1.HashMap

    HashMap类使用散列表实现Map 接口。

    2.TreeMap

    TreeMap 类通过使用树实现 Map 接口。TreeMap 提供了按排序顺序存储“关键字/ 值”对的有效手段,同时允许快速检索。应该注意的是,不像散列映射,树映射保证它的元素按照关键字升序排序。 

    3.AbstractMap

    AbstractMap对三个具体的映射实现来说,是一个超类。

     

     

  • 相关阅读:
    Java工作中常用到的工具
    得到区块链直播记录
    如何高效的解决问题
    pgsql数据库应用两点注意
    flask如何使模板返回大文件,又不消耗大量内存
    python内存诊断
    pycharm整体缩进的快捷键
    gdb生成的core文件位置
    gdb源码安装,指定使用的python版本
    gdb源码安装过程中的问题:no termcap library found
  • 原文地址:https://www.cnblogs.com/mydouya/p/7309162.html
Copyright © 2011-2022 走看看