JAVA集合框架特征介绍(详细的去看看动力节点的java基础大全301集就知道了)
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架。在平常的学习开发中,灵活熟练地使用这些集合框架,可以很明显地提高我们的开发效率,当然仅仅会用还是不够的,理解其中的设计思想与原理才能更好地提高我们的开发水平。下面是自己对Java集合框架方面的学习总结。
一、概述
二、Collection接口 1.List 2.Set 3.Queue
三、Map接口 1.HashMap实现原理 2.其它Map实现类
四、其它集合类
五、总结
一、概述
在Java 2之前,Java是没有完整的集合框架的。它只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。这些容器类在使用的过程中由于效率问题饱受诟病,因此在Java 2中,Java设计者们进行了大刀阔斧的整改,重新设计,于是就有了现在的集合框架。需要注意的是,之前的那些容器类库并没有被弃用而是进行了保留,主要是为了向下兼容的目的,但我们在平时使用中还是应该尽量少用。
Java集合框架
从上面的集合框架图可以看到,Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等等。
二、Collection接口
Collection接口是处理对象集合的根接口,其中定义了很多对元素进行操作的方法,AbstractCollection是提供Collection部分实现的抽象类。下图展示了Collection接口中的全部方法。
Collection接口结构
其中,有几个比较常用的方法,比如方法add()添加一个元素到集合中,addAll()将指定集合中的所有元素添加到集合中,contains()方法检测集合中是否包含指定的元素,toArray()方法返回一个表示集合的数组。Collection接口有三个子接口,下面详细介绍。
1.List
List接口扩展自Collection,它可以定义一个允许重复的有序集合,从List接口中的方法来看,List接口主要是增加了面向位置的操作,允许在指定位置上操作元素,同时增加了一个能够双向遍历线性表的新列表迭代器ListIterator。AbstractList类提供了List接口的部分实现,AbstractSequentialList扩展自AbstractList,主要是提供对链表的支持。下面介绍List接口的两个重要的具体实现类,也是我们可能最常用的类,ArrayList和LinkedList。
ArrayList
通过阅读ArrayList的源码,我们可以很清楚地看到里面的逻辑,它是用数组存储元素的,这个数组可以动态创建,如果元素个数超过了数组的容量,那么就创建一个更大的新数组,并将当前数组中的所有元素都复制到新数组中。假设第一次是集合没有任何元素,下面以插入一个元素为例看看源码的实现。
1、方法add(E e)向集合中添加指定元素。 public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e; return true;
}2、此方法主要是确定将要创建的数组大小。 private void ensureCapacityInternal(int minCapacity) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
} private void ensureExplicitCapacity(int minCapacity) {
modCount++; if (minCapacity - elementData.length > 0)
grow(minCapacity);
}3、最后是创建数组,可以明显的看到先是确定了添加元素后的大小之后将元素复制到新数组中。 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0)
newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
LinkedList
同样,我们打开LinkedList的源文件,不难看到LinkedList是在一个链表中存储元素。
在学习数据结构的时候,我们知道链表和数组的最大区别在于它们对元素的存储方式的不同导致它们在对数据进行不同操作时的效率不同,同样,ArrayList与LinkedList也是如此,实际使用中我们需要根据特定的需求选用合适的类,如果除了在末尾外不能在其他位置插入或者删除元素,那么ArrayList效率更高,如果需要经常插入或者删除元素,就选择LinkedList。
2.Set
Set接口扩展自Collection,它与List的不同之处在于,规定Set的实例不包含重复的元素。在一个规则集内,一定不存在两个相等的元素。AbstractSet是一个实现Set接口的抽象类,Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。
散列集HashSet
散列集HashSet是一个用于实现Set接口的具体类,可以使用它的无参构造方法来创建空的散列集,也可以由一个现有的集合创建散列集。在散列集中,有两个名词需要关注,初始容量和客座率。客座率是确定在增加规则集之前,该规则集的饱满程度,当元素个数超过了容量与客座率的乘积时,容量就会自动翻倍。
java 集合类有哪些
Java集合类主要有以下几种:1. List集合 List集合是有序的集合,可以包含重复的元素。它主要有两种实现方式:ArrayList和LinkedList。ArrayList是基于数组实现的,查询效率高;LinkedList是基于链表实现的,插入和删除元素的效率高。2. Set集合 Set集合是一种不包含重复的元素的集合。它主要有三种实现方式:Ha...
java中的集合类有哪些
Java中的集合类主要有以下几种:1. List(列表)List 是有序集合,会按照元素插入的顺序保存元素。它允许包含重复的元素,并且提供了按索引访问元素的手段。主要的 List 实现类有 ArrayList、LinkedList 等。2. Set(集合)Set 是一种不包含重复的元素的集合。它最多包含一个 null 元素。主要的 Set ...
java集合类型有哪些
java集合类型有:1、List(有序、可重复)。List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。2、Set(无序、不能重复)。Set里存放的对象是无序,不能...
java 有哪些集合
Java中的集合主要有以下几种:1. List(列表)List是有序的集合,可以包含重复的元素。它主要有两种实现方式:ArrayList和LinkedList。ArrayList是基于数组实现的,查询效率高但插入和删除效率低;LinkedList是基于链表实现的,插入和删除效率高但查询效率低。2. Set(集合)Set是一种不包含重复元素的集合。...
java有几种集合
java有三种集合,包括Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。1、Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对象按特定方式排序,例如TreeSet类,它可以按照默认排序,也可以通过实现接口来自定义排序方式。2、List...
java集合类
集合类存放于java.util包中。它们存放的都是对象的引用,而非对象本身。我们称集合中的对象就是指集合中对象的引用(reference)。集合类型主要有三种:set(集)、list(列表)和map(映射)。(1)集 集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中。集中的对象不能...
java集合分为哪几大类
Set、List、Map和Queue4大类。1、Set:代表无序的、不允许有重复元素的集合。2、List:代表有序的、允许有重复元素的集合。3、Map:代表具有映射关系的集合。4、Queue:代表队列集合。
Java集合入门,看这篇就够了(Java集合框架深度解析)
Java中的集合框架大类可分为Collection和Map;两者的区别如下: Collection是单列集合;Map是双列集合 Collection中只有Set系列要求元素唯一;Map中键需要唯一,值可以重复 Collection的数据结构是针对元素的;Map的数据结构是针对键的二、Collection体系: collection包括两大体系,List和Set List的特点: List代表一个元素有序、...
java集合分为哪几大类
Java集合框架是Java语言的核心部分之一,它提供了各种不同类型的集合,用于存储和管理数据。Java集合分为以下几大类:1. **Collection**:这是所有集合的超类,它定义了集合的基本接口,如添加、删除、查找等操作。2. **List**:列表(List)是一种特殊的集合,它按顺序存储元素,并提供了一种方便的...
java中的集合有几种
集合类是放在java.util.*;这个包里。集合类存放的都是对象的引用,而非对象本身,为了说起来方便些,我们称集合中的对象就是指集合中对象的引用(reference)。引用的概念大家不会忘了吧,在前边我们讲数据类型时讲的。集合类型主要有3种:set(集)、list(列表)、map(映射)和Queue(队列)。\/\/队列...