集合

集合


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<E>  list

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

        ArrayList<String> list = new ArrayList<String>();

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

泛型类

public class 类名<T>{

}

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

public <T> void 类名(T a) {

    System.out.println(a);

}

泛型接口

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

public interface 类名<T>{

    public  void showInfo(T t);

}

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

public class 实现类名<T> implements xxx<T>{

     @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的实现类对比
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 5,948评论 0 13
  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 4,132评论 0 2
  • 自定义泛型 1.1、泛型的定义介绍 在集合中,不管是接口还是类,它们在定义的时候类或接口名的后面都使用<标识符>,...
    Villain丶Cc阅读 12,859评论 0 7
  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 4,050评论 0 1
  • title: java集合框架学习总结 tags:集合框架 categories:总结 date: 2017-03...
    行径行阅读 5,633评论 0 2