zoukankan      html  css  js  c++  java
  • Java-->List&Set

    一、List集合

    特点:有序可重复

    List集合的猜想:
    1、每个元素是不是应该有序号  index
    2、addFirst、addLast、set(intdex, 对象)
    3、get(index)....

    1.1 ArrayList

    ArrayList是List的一个实现类。
    底层其实是使用的数组才实现的集合。
    1、ArrayList中可以存储null。并且null也可以重复。
    
    
    优点:元素查找速度很多。(有下表找到非常方便)
    缺点:添加和删除效率低。

    1.2 LinkedList

    也是List的实现类。
    底层是用链表实现的。
    
    优点:添加和删除元素效率高。
    缺点:查找的效率低。
    
    使用的时候,仍然是使用的List的一些方法。

    1.3、Stack

    栈结构。    先进后出

    二、Set集合

    Set接口没有提供Collection接口额外的方法,但实现Set接口的集合类中的元素是不可重复的。总结:无序不可重复

    2.1、HashSet

    HashSet可以存储null。
    
    HashSet存储的规则问题:
    1、存入对象的时候,先获取要存入的对象的Hash值(hashCode方法的返回值)。
    如果欲存入的对象的Hash值,与集合中的已经存入的对象的Hash值都不相等,
    则认为不重复,添加成功。添加动作结束。
    如果发现有与欲添加的对象的HashCode相等的对象,则进入下面的步骤。
    2、判断这两个HashCode相等的对象是不是同一个对象,如果是同一个对象(==),则添加失败,添加动作完成。    
    如果不是同一个对象,则进行下面的步骤。
    3、如果不是同一个对象,则调用欲添加对象的equals方法,把与这个对象HashCOde相等的那个对象作为参数传递。返回ture,则代表重复,添加失败。否则添加成功。
    
    
    注意:在覆写hashCode和equals的时候,要保证这个两个方法重写的规则一样。
    意思是说:当hashCode相等的时候,equals返回true。hashCode不等,则应该返回false。
    
    
    总结:存储HashSet的时候,只需要覆写两个方法:hashCode和equals
    Hash表:存了每个元素的Hash值。每新存入一个对象,都会查一次Hash表

    2.1.1 LinkedHashSet

    底层用栈实现的HashSet
    可以保留顺序
    以后较常使用

    3.2、TreeSet

  • 相关阅读:
    C# 隐式转换 显示转换
    C# 枚举几种写法细节
    C# System.Int32 与 int 区别
    JavaScript中的闭包
    JS Arguments对象
    分页存储过程 sql
    JS Select 选项清空
    WebGL学习笔记三
    WebGL学习笔记二
    WebGL学习笔记一
  • 原文地址:https://www.cnblogs.com/xmcx1995/p/5757815.html
Copyright © 2011-2022 走看看