集合

集合


Collection

Collection接口表示一个容器,容器中只能存储引用数据类型,建议存同一类型的引用类型,方便后续遍历等操作。

容器中的元素可以是有序的、可重复的,称为List接口

也可能是无序的、唯一的,称为Set接口。


List接口

List 接口中的元素时有序的、可重复的。List接口中的元素通过索引(index)来确定元素的顺序。

ArrayList

ArrayList是List接口的实现类,底层数据结构是数组,实现大小可变的数组。线程不安全 jdk1.2

ArrayList底层数据结构是数组,默认数组容量为10,如果超过容量会自动拓容,拓容:新容量=旧容量+旧容量/2

Vector

Vector 是List接口的实现类,底层数据结构是数组,是大小可变的数组。线程安全 jdk1.0

Vector底层数据结构是数组,默认数组大小是10,如果超过容量会自动拓容,拓容:新容量=旧容量+增长因子,增长因子可设定


LinkedList

LinkedList是List接口的实现类,底层数据结构是链表。线程不安全 jdk1.2


Iterator和ListIterator

Iterator在迭代过程中不允许向集合中添加元素

ListIterator允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置


泛型(generic)

泛型就是将类型参数化

表示声明了一个列表list,列表的元素是E类型

        ArrayList  list

声明了一个列表list,列表的元素只能是String类型。

        ArrayList list = new ArrayList();

泛型在编译器起作用,运行时jvm察觉不到泛型的存在。运行时已经被擦除了

泛型类

public class 类名{

}

泛型方法   一定程度上优化了方法重载

public void 类名(T a) {

    System.out.println(a);

}

泛型接口

如果接口中的方法的参数(形参、返回值)不确定时,可以考虑使用泛型接口

public interface 类名{

    public  void showInfo(T t);

}

在实现类中确定泛型接口的类型,若是无法确定泛型接口的类型则继续使用泛型

public class 实现类名 implements xxx{

     @Override

     public void showInfo(T t) {

     }

}

泛型的上限和下限

泛型的上限ArrayList(? extends xxx) list 声明了一个容器,容器中的元素类型一定要继承于xxx,我们称这种形式叫做泛型的上限

泛型的下限ArrayList(? super xxx) list 声明了一个容器,容器中的元素类型一定要是xxx的父类,我们称这个形式为泛型的下限


Set接口

Set接口表示一个唯一、无序的容器(和添加顺序无关)


HashSet

HashSet是Set接口的实现类,底层数据结构是哈希表。线程不安全,不同步 jdk1.2


哈希表工作原理

如果向HashSet中添加元素时,一定要实现hashCode方法和equals方法。

优点:添加、删除、查询效率高;缺点:无序


LinkedHashSet


LinkedHashSet是Set接口的实现类,底层数据结构哈希表+链表,哈希表用于散列元素;链表用于维持添加顺序。线程不安全,不同步 jdk1.4

添加元素,需要实现hashCode和equals方法。


TreeSet

TreeSet 是Set接口的实现类,底层数据结构是二叉树。线程不安全,不同步 jdk1.2

TreeSet 存储的数据按照一定的规则存储。存储规则让数据表现出自然顺序。本质上是无序的

添加自定义元素一定要提供比较策略,比较策略分两种:内部比较器和外部比较器


Map接口

Map接口称为键值对集合或者映射集合,其中的元素(entry)是以键值对(key-value)的形式存在。

Map 容器接口中提供了增、删、改、查的方式对集合进行操作。

Map接口中都是通过key来操作键值对,一般key是已知。通过key获取value。


HashMap


HashMap 是Map的实现类,key以HashSet存储。线程不安全,不同步 jdk1.2

存储元素时,key一定要实现hashCode和equals,一般建议使用String作为Map接口的key


LinkedHashMap

LinkedHashMap是Map接口的实现类,key以LinkedHashSet存储。线程不安全,不同步 jdk1.4

哈希表散列key,链表维持key的添加顺序。


TreeMap


TreeMap是Map的实现类,key以TreeSet存储。线程不安全,不同步 jdk1.2




List和Set的实现类对比

你可能感兴趣的:(集合)