Java类集合整理

1、概念

1、路径:集合类存放于java.util包中。

2、存储:集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。另一面,就是集合不支持存放基本数据类型。

3、分类:集合类型主要有3种:list(列表)、set(集)和map(映射)。

        列表,主要特征:对象以线性方式存储,无特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。列表在数据结构中分别表现为:数组和向量、链表堆栈、队列。 

        集(set),是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象(无序决定不能有重复对象)。集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。

        映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了 对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况 下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。

4、接口:集合接口分为:Collection和Map,list、set实现了Collection接口

2、JAVA集合类

集合的两个顶级接口分别为:CollectionMap

2.1、Collection接口

Collection接口下有两个比较常用的接口分别是List(列表)和Set(集),分别继承与Collection接口,extends,其中List可以存储重复元素,元素是有序的(存取顺序一致),可以通过List脚标来获取指定元素;而Set不可以有重复元素,元素是无序的。


第一、List接口

List接口中,比较常用的类有三个:ArrayList、Vactor、LinkedList,存放都是有序的。后者实现前者,implements

1)Vector 线程安全的,多了一种取出元素的方式:枚举(Enumeration),但已被ArrayList取代。适用于多线程中。

     基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走出Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector使用了“synchronized”,这个也是Vector和ArrayList的唯一的区别。

2)ArrayList 线程不安全的,对元素的查询速度快。适用于查多,修改删除少的场景。

        同Vector一样是一个基于数组实现的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

3)LinkedList 线程不安全,基于链表结构,对元素的增删速度很快。适用于查询少,修改删除较多的场景。


第二、Set接口

Set接口中,比较常用的类有两个:HashSet、TreeSet:

1)HashSet:要保证元素唯一性,需要覆盖掉Object中的equals和hashCode方法(因为底层是通过这两个方法来判断两个元素是否是同一个),是无序的。  

2)TreeSet:以二叉树的结构对元素进行存储,可以对元素进行排序

      排序的两种方式:

      1、元素自身具备比较功能,元素实现Comparable接口,覆盖compareTo方法。

      2、建立一个比较器对象,该对象实现Comparator接口,覆盖compare方法,并将该对象作为参数传给TreeSet的构造函数(可以用匿名内部类)。


2.2、Map接口

Map接口,其特点是:元素是成对出现的,以键和值的形式体现出来,键要保证唯一性:常用类有:HashMap,Hashtable ,TreeMap。

1)HashMap线程不安全等的,允许存放null键null值。

2)Hashtable线程安全的,不允许存放null键null值。

3)TreeMap:可以对键进行排序(要实现排序方法同TreeSet)。


Collection和Map两个接口对元素操作的区别:

1、存入元素:

Collection接口下的实现类通过add方法来完成,而Map下是通过put方法来完成。

2、取出元素:

Collection接口下:List接口有两种方式:1、get(脚标);2、通过Iterator迭代方式获取元素;而Vactor多了一种枚举(Enumeration)的方式。Set接口通过迭代的方式获取元素。

Map接口下:先通地keySet获取键的系列,然后通过该系列使用Iterator迭代方式获取元素值。

猜你喜欢

转载自blog.csdn.net/jiahao1186/article/details/83958296