zoukankan      html  css  js  c++  java
  • list和set以及其子类

    ************ java.util.List子接口, 特点:
    * 1. 有序, 也就是存储和取出的顺序一致.
    * 2. 有索引, 也就是具体的角标
    * 3. 可以存储重复的元素.
    *
    * List接口中常见的实现类: ArrayList, LinkedList, Vector;
    *
    * 成员方法:
    * 添加元素:
    * public boolean add(E e);
    * public boolean add(int index, E e);
    *
    * 删除元素:
    * public boolean remove(E e);
    *
    * 修改元素:
    * public E set(int index , E e);
    *
    * 查询:
    * public E get(int index);
    * public int size();


    ************ LinkedList是List接口的实现类
    * 特点:
    * 1. 完全符合List接口的特点, 有序,有索引,可以存储重复元素
    * 2. 底层是维护了一个链表, 增删速度快,查询速度慢
    * 3. 线程不安全,效率高
    *
    * 额外添加了一些和头尾相关的方法:
    1. public void addFirst(E e);//添加元素在开头位置
    2. public void addLast(E e);// 添加元素在结尾位置
    3. public E getFirst();// 获取开头位置元素
    4. public E getLast();// 获取结尾位置元素
    5. public E removeFirst();// 移除开头位置元素
    6. public E removeLast();// 移除结尾位置元素
    7. public E pop();// 弹出开头位置元素
    8. public void push(E e);// 压入开头位置元素
    9. public boolean isEmpty();// 判断集合是否为空


    * ***********java.uitl.Set接口是Collection子接口;
    * 特点:
    * 1. 无序的, 存储和取出的顺序不能保证
    * 2. 无索引
    * 4. 不能存储重复元素 (存储的元素必须覆盖了equals方法和hashCode);
    *
    * Set接口中常见实现类: HashSet, LinkedHashSet
    *
    * 注意点:
    * 由于Set集合没有索引,不能使用普通for循环
    * 只能使用,增强for, 和迭代器遍历!


    *********** HashSet,是Set接口的实现类,特点:
    * 1. 完全符合Set接口的特点, 无序,无索引,存储元素不重复
    * 2. 底层维护的是一个hash表, 只要使用hash表实现的地方都可以提高性能.
    * 3. 线程不安全, 效率高.


    **************hashCode方法,是Object中的一个方法;
    * public int hashCode();
    *
    * 所以所有对象都可以调用hashCode方法,获取对象的哈希值.
    *
    * 注意点
    * 1. 哈希值并不是地址值, 在java中是看不到对象的真正地址值的, 地址值的计算仅用到了哈希值而已.
    * 2. 对于引用数据类型来讲, == 确实比较的是地址值.

    ********** 在HashSet中的底层实现,是维护了一种hash表, hash表的本质也是一个数组.
    * 哈希表: 是一种数据结构, 他的计算依赖于哈希值
    * 哈希值: 通过一定的算法计算出来的.
    *
    * hashSet中存储内容的时候,之所以去除重复的元素,依赖于hashCode(哈希值), equals


    *********** 使用HashSet存储JDK中提供的数据String,如何去除重复的元素
    * 因为: String类中已经覆盖了hashCode方法和equals方法
    *
    * 使用HashSet存储自定义数据Person对象,如何去除重复的元素
    * 如果自定义的类,需要去除重复的元素根据具体的内容,也需要重写Object中的hashCode方法和equals方法
    * 快捷键: alt + shift + s 按 h 自动生成即可
    *
    * 如果要将一个十进制的整数转成16进制,使用Integer中的, toHexString(int i)


    ********** java.util.LinkedHashSet是Set接口的一个实现类;
    * 特点:
    * 1. 有序, 存储和取出的顺序是一致的.
    * 2. 无索引
    * 3. 存储元素不能重复(需要存储的元素,已经覆盖了hashCode和equals方法)
    *
    * 注意点:
    * 父类中没有某种功能,不代表子类一定不能有.
    * LinkedHashSet虽然实现了Set接口,但是它能够保证有序.

    ************** ArrayList注意点: add方法, contains方法
    * public boolean contains(E e)
    * 依赖于hashCode和equals方法
    * ArrayList可以存储重复的元素, 因为ArrayList中的add方法并没有依赖于hashCode和equals方法
    * ArrayList中的Contains, 依赖了hashCode和equals方法,判断哈希值和内容判断是否有这个元素.
    * 只要是Arraylist的add方法,一定返回true
    *
    *
    * HashSet注意点, add方法, contains方法
    * 两个方法都依赖了HashCode和Equals方法.
    *
    * HashSet特点:
    * 1. 无序,无索引,不能添加重复元素(add)

    人生就像一场路途,尝遍酸甜苦辣,方知人生苦甜.
  • 相关阅读:
    PHP 函数
    MariaDB——(三) MariaDB 10.0.15 standard replication主从复制搭建
    MariaDB——(二) MariaDB 10.0.15 日志文件—undo 日志
    MariaDB——(一)CentOS 6.5 下 MariaDB 10.0.15 YUM 安装
    虚拟机中的linux系统文件突然全部变成只读的问题
    复制虚拟机vmware centos搭建集群节点过程中网络配置eth0和eth1遇到的问题以及NAT模式下虚拟机静态IP配置方法
    WMware 中CentOS系统Hadoop 分布式环境搭建(一)——Hadoop安装环境准备
    关于Oracle字符集在dmp文件导入导出中的乱码影响
    VMware 打开虚拟机的时候提示 internal error 内部错误 遇到这个问题时我的解决方法
    ORACLE 存储过程中保存用户自定义异常信息的一种方式
  • 原文地址:https://www.cnblogs.com/zennon/p/8192804.html
Copyright © 2011-2022 走看看