黑马程序员—Java集合框架
2015-09-06 06:22
423 查看
------Java培训、Android培训、iOS培训、Net培训、期待与您交流! -------
一、集合的概述
集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体。集合被用于存储、获取、操纵和传输聚合的数据。Java集合框架提供了有效的数据结构和算法,因此不需要我们自己编写代码实现这些功能。而且结合框架对各个接口的实现是可以互换的,因此很容易转换接口。这样就提高了软件的复用性。
二、集合框架
Java平台提供了一个全新的集合框架。集合框架的核心接口为Collection、List(列表)、Set(集合)和Map(映射),如下图:
从上图中可以看到,Collection是集合继承树中最顶层的接口,几乎所有的Java集合框架成员都继承实现了Collection接口,或者与其有密切关系。Collection提供了关于集合的通用操作。Set接口和List接口都继承了Collection接口,而Map接口没有继承Collection接口。因此,Set对象和List对象都可以调用Collection接口的方法,而Map对象则不可以。
Set有点类似数学中集合的定义,是无序的、没有重复项目的集合。
List是位置性集合,加进清单的元素可以加在清单中特定位置或加到末尾,可以保存重复的元素。
Map用于关键字/数值对,其中关键字是数值的惟一标识(不可重复),用户可以按关键字存取数据,数据可重复。
以下列举了Collection常用的方法:
四、List列表
List列表作为集合的一种,主要特点在于其中的元素保持一定的顺序,常用List的两种实现类是ArrayList类和LinkedList类。
(1)ArrayList类
在Java中,标准数组是定长的,创建后,就不能被加长或缩短,也就意味着开发者必须先知道数组可以容纳多少元素,一般情况下,只有在运行时才能知道需要多大的数组,为了解决这个问题,集合框架定义了ArrayList,它能够动态地增加或者减少其大小。
ArrayList有三种构造方法:
ArrayList( );----------------------------建立一个空的数组列表
ArrayList(Collection c );------------建立一个数组列表,该列表由类C中的元素初始化;
ArrayList(int initialCapacity);------建立一个数组列表,该数组有指定的初始容量(capacity);
ArrayList类主要的方法及功能描述如下表:
示例:创建一个数组列表,接着添加String类型对象,使列表显示出来,将其中一些元素删除后,再一次显示列表;
控制台输出的内容:
数组的大小:0
加入元素后数组的大小:5
数组的内容:[E, A, B, C, D]
删除后元素后数组的大小:3
数组的内容:[A, C, D]
(2)LinkedList类
LinkedList类提供了一个链接列表的数据结构,它有两种构造方法;
LinkedList( );--------------------------------建立一个空的链接列表;
LinkedList( Collection c);-----------------建立一个链接列表,该列表由类C中的元素初始化;
示例:创建一个数组列表,接着添加String类型对象,使列表显示出来,将其中一些元素删除后,再一次显示列表。
控制台输出的内容:
数组的大小:0
加入元素后数组的大小:6
数组的内容:[E, A, B, C, D, F]
删除后元素后数组的大小:4
数组的内容:[A, B, C, D]
五、Set类
Set集合是一种不包括重复元素的Collection,即Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。Set类中的两个主要的类HashSet类和TreeSet类。
(1)HashSet类
HashSet类创建了一个类集,该类集使用散列表进行存储,而散列表则通过使用称之为散列法的机制来存储信息。在散列中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码。而散列码则被用来当做与关键字相连的数据的存储下标。另外,可以向HashSet中添加null值,但只能添加一次,而且重复向HashSet中添加元素其值只显示一次。
HashSet类的构造方法如下:
HashSet( );------------------------------------------------------构造一个默认的散列集合
HashSet(Collection c);---------------------------------------用类C中的元素初始化散列集合
HashSet(int initislCapacity);--------------------------------用capacity初始化散列集合的容量
HashSet(int initialCapacity , float fillRatio);-------------用参数初始化散列集合的容量和填充比(也称为加载容量)
HashSet类常用的方法及功能描述如下表:
示例:
控制台输出的内容:
HashSet中的元素[null, a, b, c]
(2)TreeSet类
TreeSet为使用树来进行存储的Set接口提供了一个工具。对象按升序进行存储,这方便我们对其进行访问和检索。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。
TreeSet类的构造方法如下:
TreeSet( );-------------------------------------构造一个空的树集合,其元素按升序排序
TreeSet(Collection c);----------------------用类C中的元素初始化树集合
TreeSet(Comparator comp);-------------按照由comp指定的比较方法进行排序
TreeSet(SortedSet ss);-------------------构造了一个包含了ss的元素的树集合
TreeSet类中有几个特殊的方及功能描述:
示例:
HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]
控制台输出的内容:
TreeSet类输出内容[0, 1, 2, 4, 6]
注明:TreeSet类会按树顺序存储其元素,所以它们被按照数字大小排列;而HashSet则 不会。
六、通过迭代方法访问类集——Iterator接口
Iterator()是一个或者实现Iterator,或者实现ListIterator接口的对象。Iterator可以完成通过循环输出类集内容,从而获得或删除元素。ListIterator是对Iterator的扩展,允许双向遍历列表,并且可以修改单元。
Iterator接口说明方法的总结:
在通过迭代方法访问类集之前,必须得到一个迭代方法。通常,使用迭代方法循环输出类集内容的操作步骤如图:
示例:
控制台显示的内容:
数组的内容是:ABCD
七、映射
映射(map)是一个存储关键字和值的关联,或者说是“关键字/值”对的对象,即给定一个关键字,可以得到它的值。关键字和值都是对象,关键字必须是唯一的,但值是可以被复制的。而Map接口映射唯一关键字到值。关键字是以后用于检索值的对象。给定一个关键字和一个值,可以存储这个值到一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它。
Java提供了几个用来实现映射接口的类。可以被用作映射的类如下表:
(1)HashMap类
HashMap类使用散列表实现Map接口,其构造方法如下:
HashMap();-----------------------------------------------构造一个默认的散列映射;
HashMap(Map m);--------------------------------------用类m中的元素初始化散列映射
HashMap(int Capacity);-------------------------------将散列集合的容量初始化为capacity
HashMap(int Capacity , float fillRatio);------------用参数同时初始化散列映射的容量和填充比
HashMap类的主要方法及功能如下表:
示例:
控制台显示的内容:
添加元素后的结果为:
{1=a, 2=b, 3=c, 4=d}
删除和替换元素后的结果为:
{1=a, 2=e, 4=d}
注意:HashMap类不保证输出元素的顺序
(2)TreeMap类
TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。不像散列映射,树映射保证它的元素按照关键字升序排序。
TreeMap的构造方法如下:
TreeMap();---------------------------------------构造一个空树的映射
TreeMap(Map m);------------------------------用类m中的元素初始化映射,使用关键字按自然排序
Treemap(Comparator comp);---------------构造一个空的基于树的映射通过的使用Comparator来排序
TreeMap(SortedMap sm);--------------------用从sm的输入来初始化一个树映射
TreeMap类常用方法及功能如下:
示例:
控制台输出的内容:
所有的元素的值为:{1=a, 3=d, 5=c, 7=b}
元素的值:a
元素的值:d
元素的值:c
元素的值:b
一、集合的概述
集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体。集合被用于存储、获取、操纵和传输聚合的数据。Java集合框架提供了有效的数据结构和算法,因此不需要我们自己编写代码实现这些功能。而且结合框架对各个接口的实现是可以互换的,因此很容易转换接口。这样就提高了软件的复用性。
二、集合框架
Java平台提供了一个全新的集合框架。集合框架的核心接口为Collection、List(列表)、Set(集合)和Map(映射),如下图:
从上图中可以看到,Collection是集合继承树中最顶层的接口,几乎所有的Java集合框架成员都继承实现了Collection接口,或者与其有密切关系。Collection提供了关于集合的通用操作。Set接口和List接口都继承了Collection接口,而Map接口没有继承Collection接口。因此,Set对象和List对象都可以调用Collection接口的方法,而Map对象则不可以。
Set有点类似数学中集合的定义,是无序的、没有重复项目的集合。
List是位置性集合,加进清单的元素可以加在清单中特定位置或加到末尾,可以保存重复的元素。
Map用于关键字/数值对,其中关键字是数值的惟一标识(不可重复),用户可以按关键字存取数据,数据可重复。
三、Collection接口
Collection接口是集合框架最基础的接口,所以这个接口定义了整个集合框架都可以调用的方法,因此必须十分的熟悉此定义。以下列举了Collection常用的方法:
四、List列表
List列表作为集合的一种,主要特点在于其中的元素保持一定的顺序,常用List的两种实现类是ArrayList类和LinkedList类。
(1)ArrayList类
在Java中,标准数组是定长的,创建后,就不能被加长或缩短,也就意味着开发者必须先知道数组可以容纳多少元素,一般情况下,只有在运行时才能知道需要多大的数组,为了解决这个问题,集合框架定义了ArrayList,它能够动态地增加或者减少其大小。
ArrayList有三种构造方法:
ArrayList( );----------------------------建立一个空的数组列表
ArrayList(Collection c );------------建立一个数组列表,该列表由类C中的元素初始化;
ArrayList(int initialCapacity);------建立一个数组列表,该数组有指定的初始容量(capacity);
ArrayList类主要的方法及功能描述如下表:
示例:创建一个数组列表,接着添加String类型对象,使列表显示出来,将其中一些元素删除后,再一次显示列表;
import java.util.ArrayList; public class MyArrayList { public static void main(String[] args) { //创建一个ArrayList对象 ArrayList ar = new ArrayList(); System.out.println("数组的大小:"+ar.size()); //向ArrayList对象中添加内容 ar.add("A"); ar.add("B"); ar.add("C"); ar.add("D"); //把“E”加在ArrayList对象的第一个位置 ar.add(0,"E"); System.out.println("加入元素后数组的大小:"+ar.size()); System.out.println("数组的内容:"+ar); //删除数组中的对象 ar.remove("B"); ar.remove(0); //打印删除后数组的内容 System.out.println("删除后元素后数组的大小:"+ar.size()); System.out.println("数组的内容:"+ar); } }
控制台输出的内容:
数组的大小:0
加入元素后数组的大小:5
数组的内容:[E, A, B, C, D]
删除后元素后数组的大小:3
数组的内容:[A, C, D]
(2)LinkedList类
LinkedList类提供了一个链接列表的数据结构,它有两种构造方法;
LinkedList( );--------------------------------建立一个空的链接列表;
LinkedList( Collection c);-----------------建立一个链接列表,该列表由类C中的元素初始化;
示例:创建一个数组列表,接着添加String类型对象,使列表显示出来,将其中一些元素删除后,再一次显示列表。
import java.util.LinkedList; public class MyLinkedList { public static void main(String[] args) { //创建一个ArrayList对象 LinkedList ar = new LinkedList(); System.out.println("数组的大小:"+ar.size()); //向LinkedList对象中添加内容 ar.add("A"); ar.add("B"); ar.add("C"); ar.add("D"); //在列表的第一个和最后一个位置加入数据 ar.addFirst("E"); ar.addLast("F"); System.out.println("加入元素后数组的大小:"+ar.size()); System.out.println("数组的内容:"+ar); //删除数组中的对象 ar.removeFirst(); ar.removeLast(); //打印删除后数组的内容 System.out.println("删除后元素后数组的大小:"+ar.size()); System.out.println("数组的内容:"+ar); } }
控制台输出的内容:
数组的大小:0
加入元素后数组的大小:6
数组的内容:[E, A, B, C, D, F]
删除后元素后数组的大小:4
数组的内容:[A, B, C, D]
五、Set类
Set集合是一种不包括重复元素的Collection,即Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。Set类中的两个主要的类HashSet类和TreeSet类。
(1)HashSet类
HashSet类创建了一个类集,该类集使用散列表进行存储,而散列表则通过使用称之为散列法的机制来存储信息。在散列中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码。而散列码则被用来当做与关键字相连的数据的存储下标。另外,可以向HashSet中添加null值,但只能添加一次,而且重复向HashSet中添加元素其值只显示一次。
HashSet类的构造方法如下:
HashSet( );------------------------------------------------------构造一个默认的散列集合
HashSet(Collection c);---------------------------------------用类C中的元素初始化散列集合
HashSet(int initislCapacity);--------------------------------用capacity初始化散列集合的容量
HashSet(int initialCapacity , float fillRatio);-------------用参数初始化散列集合的容量和填充比(也称为加载容量)
HashSet类常用的方法及功能描述如下表:
示例:
import java.util.HashSet; public class TestHashSet { public static void main(String[] args) { //创建一个HashSet对象 HashSet hs = new HashSet(); //向HashSet对象中添加内容 hs.add("a"); hs.add("a"); hs.add("b"); hs.add("c"); hs.add("b"); hs.add("a"); //向HashSet对象中添加null hs.add(null); System.out.println("HashSet中的元素"+hs); } }
控制台输出的内容:
HashSet中的元素[null, a, b, c]
(2)TreeSet类
TreeSet为使用树来进行存储的Set接口提供了一个工具。对象按升序进行存储,这方便我们对其进行访问和检索。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。
TreeSet类的构造方法如下:
TreeSet( );-------------------------------------构造一个空的树集合,其元素按升序排序
TreeSet(Collection c);----------------------用类C中的元素初始化树集合
TreeSet(Comparator comp);-------------按照由comp指定的比较方法进行排序
TreeSet(SortedSet ss);-------------------构造了一个包含了ss的元素的树集合
TreeSet类中有几个特殊的方及功能描述:
示例:
HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]HashSet中的元素[null, a, b, c]
import java.util.TreeSet; public class MyTreeSet { public static void main(String[] args) { //创建一个TreeSet对象 TreeSet Tr = new TreeSet(); //向TreeSet对象中添加内容 Tr.add(1); Tr.add(6); Tr.add(4); Tr.add(0); Tr.add(2); System.out.println("TreeSet类输出内容"+Tr); } }
控制台输出的内容:
TreeSet类输出内容[0, 1, 2, 4, 6]
注明:TreeSet类会按树顺序存储其元素,所以它们被按照数字大小排列;而HashSet则 不会。
六、通过迭代方法访问类集——Iterator接口
Iterator()是一个或者实现Iterator,或者实现ListIterator接口的对象。Iterator可以完成通过循环输出类集内容,从而获得或删除元素。ListIterator是对Iterator的扩展,允许双向遍历列表,并且可以修改单元。
Iterator接口说明方法的总结:
在通过迭代方法访问类集之前,必须得到一个迭代方法。通常,使用迭代方法循环输出类集内容的操作步骤如图:
示例:
import java.util.ArrayList; import java.util.Iterator; public class MyListIterator { public static void main(String[] args) { //创建一个ArrayList对象 ArrayList ar = new ArrayList(); //向ArrayList对象中添加内容 ar.add("A"); ar.add("B"); ar.add("C"); ar.add("D"); System.out.print("数组的内容是:"); //使用Iterator显示数组的内容 Iterator itr = ar.iterator(); //调用hasNext()方法进行循环 while (itr.hasNext()) { Object c = itr.next(); System.out.print(c+""); } } }
控制台显示的内容:
数组的内容是:ABCD
七、映射
映射(map)是一个存储关键字和值的关联,或者说是“关键字/值”对的对象,即给定一个关键字,可以得到它的值。关键字和值都是对象,关键字必须是唯一的,但值是可以被复制的。而Map接口映射唯一关键字到值。关键字是以后用于检索值的对象。给定一个关键字和一个值,可以存储这个值到一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它。
Java提供了几个用来实现映射接口的类。可以被用作映射的类如下表:
(1)HashMap类
HashMap类使用散列表实现Map接口,其构造方法如下:
HashMap();-----------------------------------------------构造一个默认的散列映射;
HashMap(Map m);--------------------------------------用类m中的元素初始化散列映射
HashMap(int Capacity);-------------------------------将散列集合的容量初始化为capacity
HashMap(int Capacity , float fillRatio);------------用参数同时初始化散列映射的容量和填充比
HashMap类的主要方法及功能如下表:
示例:
import java.util.HashMap; public class MyHashMap { public static void main(String[] args) { //创建一个HashMap对象 HashMap hm = new HashMap(); //向HashMap对象中添加内容 hm.put(1,"a"); hm.put(2,"b"); hm.put(3,"c"); hm.put(4,"d"); System.out.println("添加元素后的结果为:"); System.out.println(hm); //删除和替换元素 hm.remove(3); hm.put(2, "e"); System.out.println("删除和替换元素后的结果为:"); System.out.println(hm); } }
控制台显示的内容:
添加元素后的结果为:
{1=a, 2=b, 3=c, 4=d}
删除和替换元素后的结果为:
{1=a, 2=e, 4=d}
注意:HashMap类不保证输出元素的顺序
(2)TreeMap类
TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。不像散列映射,树映射保证它的元素按照关键字升序排序。
TreeMap的构造方法如下:
TreeMap();---------------------------------------构造一个空树的映射
TreeMap(Map m);------------------------------用类m中的元素初始化映射,使用关键字按自然排序
Treemap(Comparator comp);---------------构造一个空的基于树的映射通过的使用Comparator来排序
TreeMap(SortedMap sm);--------------------用从sm的输入来初始化一个树映射
TreeMap类常用方法及功能如下:
示例:
import java.util.Iterator; import java.util.TreeMap; public class MyTreeMap { public static void main(String[] args) { //创建一个TreeMap对象 TreeMap tm = new TreeMap(); //向TreeMap对象中添加内容 tm.put(1,"a"); tm.put(7,"b"); tm.put(5,"c"); tm.put(3,"d"); System.out.println("所有的元素的值为:"+tm); //为tm对象中的键值添加一个迭代器 Iterator iter = tm.keySet().iterator(); for (; iter.hasNext();) { System.out.println("元素的值:"+tm.get(iter.next())); } } }
控制台输出的内容:
所有的元素的值为:{1=a, 3=d, 5=c, 7=b}
元素的值:a
元素的值:d
元素的值:c
元素的值:b
相关文章推荐
- 黑马程序员————java基础————面向对象
- 华为IT产品线面试总结
- 黑马程序员————java基础————反射
- 程序员联盟有自己的论坛啦!基于Discuz构建,还不来注册~
- 程序员联盟有自己的论坛啦!基于Discuz构建,还不来注册~
- 野生程序员的故事
- Java程序员应该知道的10个调试技巧
- 腾讯后台开发面试题--整理3
- Google面试一道排序题
- 黑马程序员--OC多态
- 程序员常去的14个顶级开发社区
- 程序员常去的14个顶级开发社区
- 黑马程序员-JAVA基础学习日记八——IO流的学习总结
- 黑马程序员----oc加强笔记----分类(Gategory)
- Java开发工程师职业发展图
- SQL面试积累
- 黑马程序员-Java基础:集合(Collection)
- 数组中只出现1次的两个数字(面试题)
- 常见的链表面试题大汇总:
- 管理层必学!刘备如何面试诸葛亮?