- 浏览: 313553 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
opalescent_:
学习了。。
java笔试题的整理和解答扩展(String专题) -
yixiao258964:
谢谢,找了好久Reverse Enginee,都说在datab ...
PowerDesigner Reverse Engineer from database-mysql -
javaAlpha:
介绍的真全啊
Java编程那些事儿86——文件操作之File类使用
Java编程那些事儿80——集合框架简述
陈跃峰
出自:http://blog.csdn.net/mailbomb
9.6.3 集合框架简述
在JDK API中专门设计了一组类,这组类的功能就是实现各种各样方式的数据存储,这样一组专门用来存储其它对象的类,一般被称为对象容器类,简称容器类,这组类和接口的设计结构也被统称为集合框架(Collection Framework)。
这组类和接口都包含在java.util包中。
为了使整个集合框架中的类便于使用,在设计集合框架时大量的使用接口,实际实现的功能类实现对应的接口,这样可以保证各个集合类的使用方式保持统一。
在集合框架中,提供的存储方式共有两种:
1、按照索引值操作数据
在这种存储方式中,为每个存储的数据设定一个索引值,存储在容器中的第一个元素索引值是0,第二个索引值是1,依次类推。在操作数据时按照索引值操作对应的数据,实现这种方式的集合类都实现java.util.Collection接口。
2、按照名称操作数据
在这种存储方式中,为每个存储的数据设定一个名称(任意非null的对象都可以作为名称),以后按照该名称操作该数据,要求名称不能重复,每个名称对应唯一的一个值。这种存储数据的方式也称作名称-数值对,也就是名值对存储。实现这种方式的几个类都实现java.util.Map接口。
这里“按照索引值操作数据”的存储方式,又按照容器内部是否能够存储重复的元素,划分成两类:
1、允许存储重复元素。
这种存储方式中,所有的类都实现了java.util.List接口。
2、不允许存储重复元素。
这种存储方式中,所有的类都实现了java.util.Set接口。
这样,集合框架中的类就分成了三大类:
1、List系列
该系列中的类按照索引值来操作数据,允许存放重复的元素。
2、Set系列
该系列中的类按照索引值来操作数据,不允许存放重复的元素。
3、Map系列
该系列中的类按照名称来操作数据,名称不允许重复,值可以重复,一个名称对应一个唯一的值。
而在数据结构中,实现数据的存储又可以使用不同的数据结构类型进行存储,例如数组、链表、栈、队列和树等,则以上三类集合框架可以使用不同的数据结构类进行实现,使用每种数据结构则具备该中数据结构的特点。例如使用数组则访问速度快,使用链表则便于动态插入和删除等,这样就造成了集合框架的复杂性。
另外,在将对象存储到集合类中,为了加快存储的速度,要求被存储对象的类中必须覆盖equals方法和hashCode方法。
对于这些集合类,下面按照以上三个系列的顺序一一进行说明。
9.6.3.1 List系列
List系列的类均实现List接口,大部分的类都以List作为类名的后缀,也有部分该体系中的类命名比较特殊。
该系列中的类,比较常见的有ArrayList和LinkedList两个。其中ArrayList是以数组为基础实现的List,而LinkedList则是以链表为基础实现的List,ArrayList拥有数组的优点,而LinkedList拥有链表的优点。
由于该体系中的类均实现List接口,所以在这些类的内部,相同的功能方法声明是保持一致的,下面进行一一介绍:
a、add方法
boolean add(Object o)
该方法的作用是追加对象o到已有容器的末尾。
另外一个add方法:
void add(int index, Object element)
该方法的作用是将对象element插入到容器中索引值为index的位置,原来位于该位置的对象以及后续的内容将依次向后移动。
b、addAll方法
boolean addAll(Collection c)
该方法的作用是将容器对象c中的每个元素依次添加到当前容器的末尾。
另外一个addAll方法:
boolean addAll(int index, Collection c)
该方法的作用是将容器对象c中的第一个元素插入到当前容器中索引值为index的位置,第二个元素插入到当前容器中索引值为index+1的位置,依次类推。而当前容器中原来位于index以及index索引值以后的元素则依次向后移动。
c、get方法
Object get(int index)
该方法的作用是返回当前容器对象中索引值为index的元素的内容。
d、indexOf方法
int indexOf(Object o)
该方法的作用是查找当前容器中是否存在对象o,如果存在则返回该对象第一次出现位置的索引值,如果不存在则返回-1。
另外一个方法lastIndexOf则是从末尾向前查找,返回从末尾向前第一次出现位置的索引值,如果不存在则返回-1。
e、remove方法
Object remove(int index)
该方法的作用是删除索引值为index的对象的内容,如果删除成功则返回被删除对象的内容。
另外一个remove方法:
boolean remove(Object o)
该方法的作用是删除对象内容为o的元素,如果相同的对象有多个,则只删除索引值小的对象。如果删除成功则返回true,否则返回false。
无论使用哪一个remove方法,类内部都自动移动将被删除位置后续的所有元素向前移动,保证索引值的连续性。
f、set方法
Object set(int index, Object element)
该方法的作用是修改索引值为index的内容,将原来的内容修改成对象element的内容。
g、size方法
int size()
该方法的作用是返回当前容器中已经存储的有效元素的个数。
h、toArray方法
Object[] toArray()
该方法的作用是将当前容器中的元素按照顺序转换成一个Object数组。
下面是一个简单的以ArrayList类为基础实现的List系列中类基本使用的示例,代码如下:
import java.util.*;
/**
* 以ArrayList类为基础演示List系列类的基本使用
*/
public class ArrayListUse {
public static void main(String[] args) {
//容器对象的初始化
List list = new ArrayList();
//添加数据
list.add("1");
list.add("2");
list.add("3");
list.add("1");
list.add("1");
//插入数据
list.add(1,"12");
//修改数据
list.set(2, "a");
//删除数据
list.remove("1");
//遍历
int size = list.size(); //获得有效个数
//循环有效索引值
for(int i = 0;i < size;i++){
System.out.println((String)list.get(i));
}
}
}
该程序的运行结果为:
12
a
3
1
1
在List系列中,还包含了Stack(栈)类和Vector(向量)类,Stack类除了实现List系列的功能以外,还实现了栈的结构,主要实现了出栈的pop方法和入栈的push方法。
而Vector类由于需要兼容老版本JDK中缘故,所以在实现的方法中需要提供老版本Vector类中对应的方法,这样导致Vector类中相同或类似的功能方法一般是成对出现的。
9.6.3.2 Set系列
Set系列中的类都实现了Set接口,该系列中的类均以Set作为类名的后缀。该系列中的容器类,不允许存储重复的元素。也就是当容器中已经存储一个相同的元素时,无法实现添加一个完全相同的元素,也无法将已有的元素修改成和其它元素相同。
Set系列中类的这些特点,使得在某些特殊场合的使用比较适合。
该系列中常见的类有:
1、CopyOnWriteArraySet
以数组为基础实现的Set类。
2、HashSet
以哈希表为基础实现的Set类。
3、LinkedHashSet
以链表为基础实现的Set类。
4、TreeSet
以树为基础实现的Set类。
以不同的数据结构类型实现的Set类,拥有不同数据结构带来的特性,在实际使用时,根据逻辑的需要选择合适的Set类进行使用。
Set系列中的类的方法和List系列中的类的方法要比List系列中少很多,例如不支持插入和修改,而且对于Set系列中元素的遍历也需要转换为专门的Iterator(迭代器)对象才可以进行遍历,遍历时顺序和Set中存储的顺序会有所不同。
下面是以HashSet类为基础实现的示例代码,代码如下:
import java.util.*;
/**
* 以HashSet为基础演示Set系列类的基本使用
*/
public class HashSetUse {
public static void main(String[] args) {
//容器对象的初始化
Set set = new HashSet();
//添加元素
set.add("1");
set.add("2");
set.add("3");
set.add("1");
set.add("1");
//删除数据
//set.remove("1");
//遍历
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println((String)iterator.next());
}
}
}
该程序的运行结果为:
3
2
1
9.6.3.3 Map系列
Map系列中的类都实现了Map接口,该系列中的部分类以Map作为类名的后缀。该系列容器类存储元素的方式和以上两种完全不同。
Map提供了一种使用“名称:值”这样的名称和数值对存储数据的方法,在该存储方式中,名称不可以重复,而不同的名称中可以存储相同的数值。具体这种存储的格式将在示例代码中进行实现。
在这种存储结构中,任何不为null的对象都可以作为一个名称(key)来作为存储的值(value)的标识,使用这种形式更利于存储比较零散的数据,也方便数据的查找和获得。Map类中存储的数据没有索引值,系统会以一定的形式索引存储的名称,从而提高读取数据时的速度。
该系列中常见的类有:
1、HashMap
以Hash(哈希表)为基础实现的Map类。
2、LinkedHashMap
以链表和Hash(哈希表)为基础实现的Map类。
3、TreeMap
以树为基础实现的Map类。
和上面的结构类似,以不同的数据结构实现的Map类,拥有不同数据结构的特点,在实际的项目中使用时,根据需要选择合适的即可。
该系列的类中常见的方法如下:
a、get方法
Object get(Object key)
该方法的作用是获得当前容器中名称为key的结构对应的值。
b、keySet方法
Set keySet()
该方法的作用是返回当前容器中所有的名称,将所有的名称以Set的形式返回。使用这个方法可以实现对于Map中所有元素的遍历。
c、put方法
Object put(Object key, Object value)
该方法的作用是将值value以名称key的形式存储到容器中。
d、putAll方法
void putAll(Map t)
该方法的作用是将Map对象t中的所有数据按照原来的格式存储到当前容器类中,相当于合并两个Map容器对象。
e、remove方法
Object remove(Object key)
该方法的作用是删除容器中名称为key的值。
f、size方法
int size()
该方法的作用是返回当前日期中存储的名称:值数据的组数。
g、values方法
Collection values()
该方法的作用是返回当前容器所有的值组成的集合,以Collection对象的形式返回。
下面是一个简单的示例,在该示例中演示Map系列类的基本使用,代码如下:
import java.util.*;
/**
* 以HashMap为基础演示Map系列中类的使用
*/
public class HashMapUse {
public static void main(String[] args) {
//容器对象的初始化
Map map = new HashMap();
//存储数据
map.put("苹果", "2.5");
map.put("桔子", "2.5");
map.put("香蕉", "3");
map.put("菠萝", "2");
//删除元素
map.remove("桔子");
//修改元素的值
map.put("菠萝", "5");
//获得元素个数
int size = map.size();
System.out.println("个数是:" + size);
//遍历Map
Set set = map.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
//获得名称
String name = (String)iterator.next();
//获得数值
String value = (String)map.get(name);
//显示到控制台
System.out.println(name + ":" + value);
发表评论
-
Java编程那些事儿37—for语句语法
2008-06-17 11:53 731Java编程那些事儿37—for语句语法 郑州游戏学院 陈跃 ... -
Java编程那些事儿38—break和continue语句
2008-06-18 15:01 781Java编程那些事儿38—break和continue语句 ... -
Java编程那些事儿39—流程控制综合示例1
2008-06-19 12:30 795Java编程那些事儿39—流程控制综合示例1 郑州游戏学院陈 ... -
Java编程那些事儿40—流程控制综合示例2
2008-06-19 20:23 891Java编程那些事儿40—流程控制综合示例2 郑州游戏学院陈 ... -
Java编程那些事儿41—流程控制综合示例3
2008-06-20 18:06 702<meta http-equiv="Conte ... -
Java编程那些事儿42—流程控制综合练习
2008-06-20 22:13 809Java编程那些事儿42—流程控制综合练习 郑州游戏学院 陈 ... -
Java编程那些事儿57—面向对象基础
2008-07-28 14:15 776Java编程那些事儿57—面向对象基础 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿58—类(一)
2008-07-29 11:05 712Java编程那些事儿58—类(一) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿59——类(二)
2008-08-04 23:36 696Java编程那些事儿59——类(二) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿60——对象
2008-08-18 23:49 632Java编程那些事儿60—— ... -
Java编程那些事儿61—面向对象设计方法和面向对象特性(一)
2008-08-29 21:42 755Java编程那些事儿61—面向对象设计方法 郑州游戏学院 陈 ... -
Java编程那些事儿62——继承(二)
2008-09-08 12:11 820Java编程那些事儿62——继承(二) 郑州游戏学院 ... -
Java编程那些事儿63—多态性
2008-09-27 10:31 752Java编程那些事儿63—多态性 郑州游戏学院 陈跃峰 出 ... -
Java编程那些事儿64——访问控制符、修饰符和其它关键字
2008-10-14 14:12 797<meta http-equiv="Conte ... -
Java编程那些事儿65——static修饰符
2008-10-23 15:46 824Java编程那些事儿65——static修饰符 郑州游戏学院 ... -
Java编程那些事儿66——final修饰符
2008-11-11 17:19 729Java编程那些事儿66——f ... -
Java编程那些事儿67——this和super
2008-11-12 12:25 968Java编程那些事儿67——this和super 陈跃峰 ... -
Java编程那些事儿68——抽象类和接口(一)
2008-12-22 11:31 756Java编程那些事儿68—— ... -
Java编程那些事儿69——抽象类和接口(二)
2008-12-27 16:25 980Java编程那些事儿69——抽象类和接口(二) 陈跃峰 ... -
Java编程那些事儿70——抽象类和接口(三)
2009-01-05 14:20 1191Java编程那些事儿70—— ...
相关推荐
《Java编程那些事儿》是陈跃峰先生的一本关于Java编程技术的著作,该书深入浅出地介绍了Java编程中的重要概念和实践技巧。这里我们主要聚焦于压缩包中的部分内容,涉及Java集合框架、时间日期处理、文件操作、多线程...
4. **集合框架**:Java集合框架提供了多种数据结构,如ArrayList、LinkedList、HashSet、HashMap等,学习如何有效地存储和操作数据至关重要。 5. **输入/输出(I/O)**:Java的I/O流系统用于读写文件、网络通信等,...
三国演义1——120回简述题全.doc
CharSequence接口在Java编程语言中扮演着重要的角色,它是对一系列字符序列的抽象表示。这个接口被设计为一个通用的、不可变的字符序列,它为处理文本数据提供了一种灵活的方式。String、StringBuffer和...
8. **集合框架**:讲解ArrayList、LinkedList、HashSet、HashMap等集合类的使用和操作。 9. **接口与抽象类**:阐述接口和抽象类的区别与使用场景,以及如何实现接口。 10. **多线程**:介绍并发编程的基本概念,...
【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...
8. **集合框架**:涵盖ArrayList、LinkedList、Vector、HashMap、HashSet等集合类的使用,以及迭代器(Iterator)的概念。 9. **多线程**:介绍Thread类和Runnable接口,线程的生命周期,同步机制(synchronized...
文件"基于转子磁链定向——SVPWM.slx"很可能是一个包含相关模型的Simulink工程,其中可能包含了电机模型、磁链定向算法、SVPWM模块以及控制逻辑等组成部分。通过分析和仿真这个模型,我们可以深入理解转子磁链定向与...
项目概述:基于用户协同过滤的商品推荐系统Java源码——探索与实践 技术栈:核心采用Java语言开发,辅以CSS、JavaScript技术支持。 项目组成:总计259个文件,具体分布如下: - Java源文件:63个,涵盖了推荐系统...
以上仅为《阿里巴巴Java编程规范》的部分要点,实际规范内容更丰富,包含了类与对象、接口与继承、集合与泛型、IO流、网络编程、反射等多个方面。通过遵循这些规范,可以提升代码质量,提高团队协作效率,同时也有利...
华为Java编程规范的知识点主要包括编码排版规范、注释规范以及类和接口的组织结构等方面的内容。 在编码排版规范方面,华为推荐的Java编程规范强调了使用统一的代码格式来提高代码的可读性。具体规则如下: 1. ...
华为JAVA编程规范 华为JAVA编程规范是华为公司制定的编程规范,旨在提高代码的阅读性和规范性。该规范涵盖了编程风格、命名惯例、编程实践等多方面的内容,旨在提高代码的可读性、可维护性和可扩展性。 1. 排版 ...
2. 坐标变换函数,如Clarke变换和Park变换的编程实现。 3. SVPWM算法的设计,包括电压矢量的生成、切换时间和开关状态的计算。 4. 控制环路的设计,包括电流环和速度环的PID控制器设置。 5. 模拟或实时硬件在环(HIL)...
Java期末考试真题试卷及复习资料【高级编程】 Java高级编程期末考试真题试卷及复习资料 名词解释 泛型 答即参数化类型允许程序创建集合时指定集合元素的类型在定义方法类接口时使用类型形参类型形参将在声明变量调用...
### Java入门——深入理解Java语言回收机制 #### 一、垃圾回收(Garbage Collection)概述 在编程领域,特别是对于初学者来说,了解并掌握Java的垃圾回收机制是非常重要的。与C++等需要手动管理内存的语言不同,...
5. **集合框架**:深入分析JAVA集合框架,包括List(ArrayList, LinkedList等),Set(HashSet, TreeSet等)和Map(HashMap, TreeMap等)接口及其实现类的使用,以及泛型的概念和应用。 6. **IO流**:介绍JAVA的...
【创意培训——创意简述.ppt】是一份关于广告企划和创意流程的培训材料,主要探讨了如何在企业管理中协调客户部与创意部的工作,以及如何制定有效的创意策略。以下是对该文件主要内容的详细解释: 1. **广告企划...
新员工入职培训必备——用户需求分析简述PPT学习教案.pptx