zoukankan      html  css  js  c++  java
  • 集合【LinkedList、HashSet、Collection集合体系】

    java.util.List(集合)接口 extends Collection(集合) 接口
    List集合的特点:
    1.有序的集合:存入元素的顺序,和取出元素的顺序是一致的(存入:1,2,3 取出:1,2,3)
    2.允许有重复的元素
    3.有索引
    特有的方法:包含索引的方法
    add(int index, E e)在指定的索引上添加元素
    E remove(int index)移除并返回,指定索引上的元素
    E set(int index, E e) 修改并返回值指定索引上的元素
    E get(int index) 返回列表中指定位置的元素。

    注意:
    操作索引,一定不要索引越界,否则会报索引越界异常
    IndexOutOfBoundsException:索引越界异常(集合会报)
    StringIndexOutOfBoundsException:字符串索引越界异常
    ArrayIndexOutOfBoundsException:数组索引越界异常

    E set(int index, E e) 修改并返回值指定索引上的元素
    List<Double> list
    Double set(int index, E e) 修改并返回值指定索引上的元素

    E remove(int index)移除并返回,指定索引上的元素
    List<Integer> list
    Integer remove(int index)移除并返回,指定索引上的元素


    add(int index, E e)在指定的索引上添加元素
    List<String> list
    add(int index, String e)在指定的索引上添加元素

    java.util.LinkedList集合 implements List 接口
    LinkedList集合是一个双向链表:可以保证迭代顺序(有序集合)

    LinkedList集合有大量操作首尾的方法,要使用LinkedList中特有的方法,不能使用多态
    E removeFirst() 移除并返回此列表的第一个元素。
    E pop() 移除并返回此列表的第一个元素。 此方法等效于 removeFirst()。
    E removeLast() 移除并返回此列表的最后一个元素。

    E getFirst() 返回此列表的第一个元素。
    E getLast() 返回此列表的最后一个元素。
    boolean isEmpty() 如果列表不包含元素,则返回 true。
    //linked.clear();
    为了防止NoSuchElementException没有元素异常
    获取元素之前,增加一个非空判断
    boolean isEmpty() 如果列表不包含元素,则返回 true。
    void addFirst(E e) 将指定元素插入此列表的开头。
    void push(E e) 将该元素插入此列表的开头。 此方法等效于 addFirst(E)。
    void addLast(E e) 将指定元素添加到此列表的结尾。相当于 add(E e)

    使用List存储的数据结构
    堆栈:先进后出
    队列:先进先出
    数组:查询快,增删慢
    链表:查询慢,增删快

    java.util.Set集合 extends Collection集合
    Set集合的特点:
    1.没有索引,不能使用普通for遍历
    2.不能存储重复的元素

    java.util.HashSet集合 implements Set集合
    HashSet集合的特点:
    1.没有索引,不能使用普通for遍历
    2.不能存储重复的元素
    3.是一个无序的集合(存入和元素和取出元素的顺序可能不一致)
    4.底层是一个哈希表(数组+链表):即增删快,又查询快


    哈希值:是一个十进制的整数,由操作系统随机给出
    使用Object类中的方法hashCode获取
    int hashCode() 返回该对象的哈希码值。

    getClass().getName() + '@' + Integer.toHexString(hashCode())
    使用反射获取类名 + @ + 把十进制的hashCode变为十六进制的值

    重写Object类的hashCode方法
    public native int hashCode();
    发现hashCode上有一个native,调用了操作系统本身的方法,获取哈希值

    使用HashSet集合存储字符串
    HashSet集合保证元素唯一的方法:
    1.元素重写hashCode方法
    2.元素重写equals方法

    String类,即重写hashCode又重写了equals(比较的是字符串的每个字符是否相同)

    java.util.LinkedHashSet extends HashSet implements Set
    LinkedHashSet集合:哈希表+链表(基于链表的哈希表)
    LinkedHashSet集合是一个双向链表可以保证迭代顺序


    使用HashSet集合存储自定义类型
    要求:同名和同年龄的人视为同一个人,只能存储一次
    HashSet集合保证元素唯一的方法:
    1.元素重写hashCode方法
    2.元素重写equals方法

    ArrayList的contains方法判断元素是否重复原理
    每添加一个元素元素的时候,先使用 contains方法判断集合中是否包含该元素
    如果不包含,在添加到集合中
    使用HashSet集合过滤ArrayList集合中的重复元素

     1 private static void method_01() {
     2         ArrayList<String> list = new ArrayList<String>();
     3         list.add("a");
     4         list.add("a");
     5         list.add("a");
     6         list.add("a");
     7         list.add("a");
     8         list.add("b");
     9         list.add("b");
    10         list.add("b");
    11         list.add("b");
    12         System.out.println(list);
    13         
    14         //创建HashSet集合
    15         HashSet<String> set = new HashSet<String>();
    16         //遍历ArrayList集合
    17         for (String s : list) {
    18             //把元素添加到set中
    19             set.add(s);
    20         }
    21         System.out.println(set);
    22     }
  • 相关阅读:
    linux 备份当前文件
    zz Apache 2.2.15 + PHP 5.3.2+ mysql windows环境配置
    zz iframe父子窗口间js方法调用
    批处理命令里获取本机的机器名
    Cache Concurrency Problem False Sharing
    因为添加assembly到GAC引起的Windows Azure Web Role部署失败
    求数组中满足a[i]<a[j]的相距最远的元素
    Dispose模式
    比较汇编指令 LEA 和 MOV
    读写Unicode字符串(UTF8,UTF16…)
  • 原文地址:https://www.cnblogs.com/caigq/p/7049031.html
Copyright © 2011-2022 走看看