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,它是链表和哈希表组合的一个数据存储结构。可以保证有序。

原文地址:https://www.cnblogs.com/zzq123/p/10101076.html