zoukankan      html  css  js  c++  java
  • List and Set

    基本类型    包装类(引用类型,包装类都位于java.lang包下)
    byte Byte
    short Short
    int Integer 【特殊】
    long Long
    float Float
    double Double
    char Character 【特殊】
    boolean Boolean
    JDK 1.5+开始,支持自动装箱、自动拆箱。
    自动装箱:基本类型 --> 包装类型 int--->Integer
    自动拆箱:包装类型 --> 基本类型

    1.ArrayList

    对于ArrayList来说,有一个尖括号<E>代表泛型。
    泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。
    注意:泛型只能是引用类型,不能是基本类型。
    ArrayList<String> list=new ArrayList<>();
    ArrayList当中的常用方法有:                     

    public boolean add(E e):向集合当中添加元素,参数的类型和泛型一致。返回值代表添加是否成功。
    备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用。
    但是对于其他集合来说,add添加动作不一定成功。

    public E get(int index):从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素。

    public E remove(int index):从集合当中删除元素,参数是索引编号,返回值就是被删除掉的元素。

    public int size():获取集合的尺寸长度,返回值是集合中包含的元素个数。

    注意事项:
    对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。
    如果内容是空,得到的是空的中括号:[]

    java.util.List接口 extends Collection接口
    List接口的特点:
    1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
    2.有索引,包含了一些带索引的方法
    3.允许存储重复的元素

    List接口中带索引的方法(特有)
    - public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
    - public E get(int index):返回集合中指定位置的元素。
    - public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
    - public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
    注意:
    操作索引的时候,一定要防止索引越界异常
    IndexOutOfBoundsException:索引越界异常,集合会报
    ArrayIndexOutOfBoundsException:数组索引越界异常
    StringIndexOutOfBoundsException:字符串索引越界异常
    java.util.LinkedList集合 implements List接口
    LinkedList集合的特点:
    1.底层是一个链表结构:查询慢,增删快
    2.里边包含了大量操作首尾元素的方法
    注意:使用LinkedList集合特有的方法,不能使用多态

    - public void addFirst(E e):将指定元素插入此列表的开头。
    - public void addLast(E e):将指定元素添加到此列表的结尾。
    - public void push(E e):将元素推入此列表所表示的堆栈。

    - public E getFirst():返回此列表的第一个元素。
    - public E getLast():返回此列表的最后一个元素。

    - public E removeFirst():移除并返回此列表的第一个元素。
    - public E removeLast():移除并返回此列表的最后一个元素。
    - public E pop():从此列表所表示的堆栈处弹出一个元素。

    - public boolean isEmpty():如果列表不包含元素,则返回true


    Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
    Vector是单线程的,速度慢
    与新 collection 实现不同,Vector 是同步的。
    void addElement(E obj)
    将指定的组件添加到此向量的末尾,将其大小增加 1
    Enumeration<E> elements()
    返回此向量的组件的枚举。
    早就被迭代器替代


    java.util.Set接口 extends Collection接口
    Set接口的特点:
    1.不允许存储重复的元素
    2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
    java.util.HashSet集合 implements Set接口
    HashSet特点:
    1.不允许存储重复的元素
    2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
    3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
    4.底层是一个哈希表结构(查询的速度非常的快)
    
    
    Set集合不允许存储重复元素的原理;存储的元素必须重写hashcode()equals()方法,Set集合在add方法的时候,add方法会调用元素的hasCode方法和equals方法,判断元素是否重复
    java.util.LinkedHashSet集合 extends HashSet集合
    LinkedHashSet集合特点:
    底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序
    
    
    哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际存储的物理地址)
    Object类有一个方法,可以获取对象的哈希值
    int hashCode() 返回该对象的哈希码值。
    hashCode方法的源码:
    public native int hashCode();
    native:代表该方法调用的是本地操作系统的方法
    Tip:1、如果两个对象equals相等,那么这两个对象的HashCode一定也相同

    2、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
    
    
    可变参数:JDK1.5之后出现的新特性
    使用前提:
    当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数.
    使用格式:定义方法时使用
    修饰符 返回值类型 方法名(数据类型...变量名){......}
    可变参数的原理:
    可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数
    传递的参数个数,可以是0(不传递),1,2...多个
       1.一个方法的参数列表,只能有一个可变参数
    2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
    - java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:
    - public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。
    - public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
    public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。

    注意:
    sort(List<T> list)使用前提
    被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则

    Comparable接口的排序规则:重写compare to 方法
    自己(this)-参数:升序
     public static <T> void sort(List<T> listComparator<? super T> ):将集合中元素按照指定规则排序。

    ComparatorComparable的区别
    Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
    Comparator:相当于找一个第三方的裁判,比较两个

    Comparator的排序规则:重写Compare方法
    o1-o2:升序
     
     
     
  • 相关阅读:
    linux 安装 apache2.2.31
    如何在高并发环境下设计出无锁的数据库操作(Java版本) 转载
    一些需要注意的点
    一些卡常技巧
    【CF809E】Surprise me! 树形DP 虚树 数学
    ISAP算法
    【AGC013C】Ants on a Circle 弹性碰撞
    【CF768G】The Winds of Winter 可持久化线段树 DFS序
    【CF633D】Fibonacci-ish
    【BZOJ4042】【CERC2014】parades 状压DP
  • 原文地址:https://www.cnblogs.com/wjy980402/p/13533696.html
Copyright © 2011-2022 走看看