zoukankan      html  css  js  c++  java
  • List接口与Set接口

    一 List接口 

    List接口,有序,可存重复元素,它的常用子类ArrayList、LinkedList。

    list接口中常用的方法:增加元素方法add、删除元素方法remove、替换元素方法、查询元素方法、

    List<String> list=new ArrayList<String>();
            list.add("a");
            list.add("v");
            //在指定位置添加元素
            list.add(1,"e");
            list.add(2, "c");
            System.out.println(list);
            //遍历
            for(int i=0;i<list.size();i++){
                System.out.print(list.get(i)+" ");
            }
            //删除指定位置的元素
            System.out.println();
            String str=list.remove(1);
            System.out.println(str);
            System.out.println(list);
            //替换指定位置的元素
            list.set(1, "z");
            System.out.println(list);

    在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器并不知道集合中的变化,容易引发数据的不确定性。

    称为并发修改异常java.util.ConcurrentModificationException

    并发修改异常的解决办法:在迭代时,不要使用集合的方法操作元素。想要在迭代时对元素操作,通过ListIterator迭代器操作元素

    数据存储的常用结构有:堆栈(先进后出)、队列(先进先出)、数组(查找元素快,增删元素慢)、链表(查找元素慢,增删元素快)。

    链表结构:

    ArrayList集合是数组结构,LinkedList集合数据存储的结构是链表结构,LinkedList是List的子类,List中的方法LinkedList都是可以使用
    Vector集合数据存储的结构是数组结构,为JDK中最早提供的集合。Vector中独特的取出方式枚举Enumeration,就是早期的迭代器。

    二 Set接口

    set接口 存放不重复元素,无序。

    HashSet集合 保证元素唯一性的方式依赖于:hashCode()与equals()方法。

    ArrayList的contains方法,底层其实就是equal方法

    hashCode方法,算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果返回的是false,就会把这个值存放在哈希表中。

    给HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法,在JavaAPI的每个类中已经重写完毕,如String类、Integer类等。但是存储自定义类型时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一

    HashSet下面有一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。可以保证有序。

  • 相关阅读:
    053-649
    053-648
    053-647
    053-646
    053-645
    053-644
    053-643
    053-642
    053-641
    053-640
  • 原文地址:https://www.cnblogs.com/zzq123/p/10101076.html
Copyright © 2011-2022 走看看