- 浏览: 428145 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
AJCF:
System.out.println(System. ...
<转>Java相对路径/绝对路径总结 -
piaobeizu:
[b][/b]
<转>Java相对路径/绝对路径总结 -
laorer:
balan326 写道你好,最近在网上看了你写的数据库连接池, ...
数据库连接池java实现小结 -
balan326:
你好,最近在网上看了你写的数据库连接池,iteye网你的博客, ...
数据库连接池java实现小结 -
kyoisme2000:
区别在哪里也不说,怎么就解决了
spring绑定java.util.Date时的一个问题
集合接口
http://blog.csdn.net/zhunj80/archive/2007/08/16/1746695.aspx
.........................
2.1 集合接口
1. 将集合接口与实现方法分开
2. Java库中的集合接口与迭代器接口
大多数集合类的基本接口是Collection接口,该接口配有两个基本方法:
boolean add(Object obj) 将对象添加给集合,集合发生改变返回true,反之false
Iterator iterator() 返回一个能够实现Iterator接口的对象,迭代器
<o:p> </o:p>
Iterator接口配有下面3个基本方法:
Object next() 依次访问集合中各个元素
boolean hasNext() 判断是否有可访问元素
void remove() 删除上次调用next时返回的元素
访问结构:
Iterator iter = col.iterator();
while(iter.hasNext()){
Object obj = iter.next();
Do something with obj
}
可将迭代器看成是位于各个元素之间;当你调用next时,迭代器便越过下一个元素,并且返回它刚越过的那个元素的引用.对next方法与remove方法的调用是相互关联的.如果调用remove方法之前,没有先对next方法进行过一次调用,那么这是不合法的,会抛出一个异常.由于集合接口与迭代器接口都属于通用接口,因此可以编写能在任何种类的集合上运行的公用方法.
由于Collection接口的方法比较多,如果实现Collection接口的每个类都提供这些方法,那将是非常累赘的;为了使实现程序更容易运行,将一些基本方法变成抽象的方法,并根据它们建立一些例行方法,建立了AbstractCollection类;现在实现一个具体的集合类,只需要扩展AbstractCollection类,就可以了.
<o:p> </o:p>
2.2 具体的集合
1. 链接式列表
数组和数组列表有一个重大的缺点,就是从数组中间删除一个元素时,被删除元素后面的所有元素都必须向前移动,插入新元素时也是一样.链接式列表就能解决这些问题;数组是将对象的引用存放在连续的存储位置中,而链接式列表则将每个对象存放在独立的链接中,链接中还存放着下一个链接的索引.Java中,所有的链接列表都是双重链接.链接式列表是个有序集合,add方法将对象添加到列表的尾部,如果想插入对象到列表中间,可使用迭代器负责选位置.
Java中提供了实现Collection接口的LinkedList类,来作为链接式列表.
LinkedList类的listIterator方法返回一个实现ListIterator接口的迭代器对象; 如下方法:
get(n) 访问某个特定元素
for(int i = 0; i< list.size();i++){
do something with list.get(i);
}
强烈不建议使用此方法结合循环遍历链接式列表,如上代码;因为每次访问某个元素时,都必须从列表的开头重新开始搜索,list对象根本不将位置信息放入高速缓存,因此效率极低.
<o:p> </o:p>
ListIterator有如下方法:
previous() 反向遍历一个列表
hasPrevious()
add() 将新元素添加到迭代器位置的前面
remove()
set(object) 用一个新元素来取代通过调用next或者previous方法而返回的上一个元素.
nextIndex() 返回下次调用next时返回的元素的整数索引
previousIndex() 返回下次调用previous时返回的元素的索引
不能在同一行里两次调用remove方法,add方法只根据迭代器的位置来运行,而remove方法与add方法不同,它根据迭代器的状态来运行.若要避免同时修改列表的异常情况,请遵循一个简单原则:可以根据需要将任意数量的迭代器添加给一个容器,让所有这些迭代器都只能阅读程序.
<o:p> </o:p>
如果有大量元素,并且做插入和删除操作,建议使用LinkedList之类链接式列表;如果只有少数元素,并且想要随机访问元素,那么完全可以使用ArrayList之类的数组或集合;
2. 数组列表
List接口用于描述一个有序的集合,有两种途径可以访问各个元素,一个是通过迭代器,另一个是使用get和set方法;前者非常适用链接式列表,后者非常适用数组.
<o:p> </o:p>
Java集合库提供了实现List接口的ArrayList类, ArrayList类封装了一个动态再分配的Object[]数组.
<o:p> </o:p>
ArrayList类的方法是非同步的,而Vector类的方法是同步的;如果是单个线程来访问元素,且需要一个动态数组时,建议使用ArrayList类;如果是多个线程来访问元素,且需要一个动态数组时,建议使用Vector类;如果用单个线程来访问Vector对象,代码将会在同步操作上浪费相当多的时间,这显然是不必要的;此外,数据量少时ArrayList效率高,反之Vector高.
<o:p> </o:p>
3. 散列集
散列表是个链接式列表的阵列,每个列表称为一个散列表元,散列表为每个对象计算出一个整数,称为散列码,不存在重复的多个元素;若要查找表中的某个对象的位置,只要计算出它的散列码,再将它减去以散列表元的总数为模数的值,得出的数就是拥有该元素的散列表元的索引.如果大致知道散列表最终会拥有多少个元素,那么应该将初始散列表元的数量设置为大约是预期元素数量的150%,最好是将散列表的大小设置成一个素数.在Java中,使用加载因子决定何时要对散列表进行再散列.
Java的集合库提供了一个HashSet类,用于根据散列表来实现一个散列集;构造函数如下:
HashSet(int initialCapacity)
HashSet(int initialCapacity,float loadFactor)
只有在不在乎集合中的各个元素的顺序时,才能使用散列集.Java增加了一个类LinkedHashSet,用于跟踪添加给散列集的元素顺序;其迭代器会按照元素的插入顺序来访问各个元素.
<o:p> </o:p>
散列函数
hashCode方法是在Object类中定义的,用于计算字符串的散列码;每个对象都有一个默认的散列码,该散列码是由对象的内存地址派生而来的;默认的散列函数不是很有用,因为带有相同内容的对象可能产生不同的散列码.
<o:p> </o:p>
4. 树集
树集是个有序集合,可以按照任何顺序将元素插入该集合,该元素将被纳入它的相应的排序位置;当迭代通过该集合时,各个值将自动按照排序后的顺序出现;将元素添加给树集的速度要比将它添加给散列表慢,但是仍然比添加到数组或链接式列表中的正确位置快.
Java集合库中提供了TreeSet类.
<o:p> </o:p>
对象的比较
树集假设插入的元素是实现Comparable接口的,它定义了一个单一方法compareTo(Object other);但是使用Comparable接口来定义排序有着明显的局限性,即只能实现该接口一次,如排序规则变化后很难适用.在这种情况下,将一个Comparator对象传递给TreeSet构造函数, Comparator接口拥有方法compare(Object a,Object b),对两个对象进行比较;这样当需要比较两个元素时,便可以使用此比较器.
<o:p> </o:p>
5. 映像
映像用于存放许多关键字/值对;
Java库提供了用于映像的通用两个实现方法,即散列映像和树状映像;散列映像用于对关键字进行散列,如HashMap,而树状映像则使用关键字的综合排序顺序,在搜索树中对关键字进行组织,如TreeMap;散列函数或比较函数只能作用于关键字,与关键字相关的值不能进行散列或者比较.
每当将一个对象添加到映像中时,必须提供一个关键字,put(key,object);若要检索一个对象,必须使用该关键字,没有值返回null, get(object);remove()方法用于从映像中删除元素,size()方法用于返回映像中的项目的数量.
Set keySet() 关键字集
Collection values() 值集
Set entrySet() 关键字/值对集,内部对象是Map.Entry.
<o:p> </o:p>
6. 专用的映像类
弱散列映像
Java集合库提供了WeakHashMap类;垃圾收集器负责跟踪活的对象,只要映像对象是活的,
发表评论
-
[转]Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
2007-09-19 09:14 15992Oracle创建自增字段方法-ORACLE SEQUENCE的 ... -
[转]使用Ant管理配置Weblogic
2007-09-17 12:59 5203... -
[转]使用ant进行自动daily build
2007-09-17 12:45 3069环境说明:我用的是weblogic81sp5+apache ... -
[转]在BEA WebLogic Server上开发应用程序的20条技巧
2007-09-17 11:59 2380在BEA WebLogic Server上开 ... -
<转>使用 JSP 2.0 开发类似 JSTL 的标记
2007-09-14 16:38 2959使用 JSP 2.0 开发类似 JST ... -
<转>Ant实战篇
2007-09-13 16:40 2420将两篇放到一起了. ... -
<转>Java相对路径/绝对路径总结
2007-08-29 22:01 6592... -
<转>深入浅出taglib
2007-08-29 11:01 1263... -
《转》EJB基本模型
2007-08-24 13:53 1118EJB从意义上来说,是一种「技术规范」,而不是一种产品。 & ... -
<转>BIRT:基于 Eclipse 的报表
2007-08-23 09:12 3614... -
<转>如何在windows 2000下通过Cygwin建立CVS服务
2007-08-22 12:11 1582<script language="javas ... -
<转>Spring学习笔记
2007-08-20 12:21 1515<转>Spring学习笔记 http://ww ... -
<转>Generic Data Access Objects
2007-08-20 12:11 1953Generic Data Access Objects htt ... -
<转>修改Ant 的 classpath
2007-08-18 17:12 6398<script>function StorePa ... -
<转>利用 Ant 和 Eclipse 有效地提高部署工作效率
2007-08-18 17:05 1346利用 Ant 和 Eclipse 有效 ... -
<转>如何从开发人员走向架构师
2007-08-16 15:13 1129如何从开发人员走向架 ... -
<转>Ant开发、测试、部署实例
2007-08-10 07:46 1514... -
<转>在Eclipse中集成Ant编程之配置祥解篇
2007-08-08 18:24 1712... -
<转> Log4j的使用和怎么在spring中集成log4j
2007-08-08 11:12 2349Log4j的使用和怎么在spring中集成log4j ... -
<转>Hibernate错误解决方案
2007-08-08 10:36 3434Hibernate错误解决方案 ......... http: ...
相关推荐
第3版 机械工业出版社<br> 教学内容和要求<br>知识点 重要程度 使用频度 难度<br>Java 入门 高 中 易<br>变量和...<br>集合 很高 很高 难<br>IO和串行化 高 中 难<br>知识点 重要程度 使用频度 难度<br><br>第1章...
)设计<br>5.1GUIDE简介<br>5.1.1启动GUIDE””<br>5.1.2输出编辑器<br>...接口<br>6.1MATLAB编译器4.0<br>6.1.1MATLAB编译器4.0的新特点<br>6.1.2MATLAB编译器的使用<br>6.1.3编译独立应用程序<br>6.2MATLAB与Visual...
实验一 复习C++有关知识<br>实验目的:<br>通过实验掌握下列知识: <br>1、复习C++有关基本知识;<br>2、熟悉VC编程、编译和调试环境;<br>内容及步骤:<br>编写一个类Complex,定义复数的加法、减法、乘法和除法运算,...
使用Perl DBI/DBD接口的问题<br>3. 教程<br>3.1. 连接与断开服务器<br>3.2. 输入查询<br>3.3. 创建并使用数据库<br>3.3.1. 创建并选择数据库<br>3.3.2. 创建表<br>3.3.3. 将数据装入表中<br>3.3.4. 从表检索信息<br...
23.5<br> 15.9<br><br>SqlMap:20.3<br> 1.48<br><br>1.16<br> <br>查询结果集(平均101行)<br><br>(1循环200次select)<br> 1055.1<br> 666.8<br><br>不定字段:710.1<br> 1.58<br><br>1.50<br> <br><br> <br><br>表...
18.0<br>1.23<br><br>1.10<br><br>每秒插入实体<br><br>(20次insert)<br>41<br>21<br>1.95<br><br>更新实体<br><br>(20次单条update)<br>27<br>19<br><br>SqlMap:24<br>1.42<br><br>1.13<br><br>查询结果集(平均101...
18.0<br>1.23<br><br>1.10<br><br>每秒插入实体<br><br>(20次insert)<br>41<br>21<br>1.95<br><br>更新实体<br><br>(20次单条update)<br>27<br>19<br><br>SqlMap:24<br>1.42<br><br>1.13<br><br>查询结果集(平均101...
<br>8-3-2 使用Raise指令触发 <br>8-4 处理异常情况 <br>8-4-1 try…finally…end语法说明 <br>8-4-2 ty…except…end语法说明 <br><br>第9章 Delphi用户接口设计详述 <br><br>9-1 基本概念 <br>9-2 TForm的属性 <br...
环境:Windows XP Professional、JDK 1.6、Ant 1.7<br>说明:Java泛型的动机是为解决类型转换在编译时不报错的问题。另外由于“范型编程”(Generic Programming)的推广,于是2004年JDK 5.0引用范型标准。本例子说明...
/// <returns>符合条件的实体集合</returns> public List<CalendarNotesModel> Select_Range_Page(CalendarNotesModel model_min, CalendarNotesModel model_max, string queryflag, string querytype, int ...
/// <returns>符合条件的实体集合</returns> public List<CalendarNotesModel> Select_Range_Page(CalendarNotesModel model_min, CalendarNotesModel model_max, string queryflag, string querytype, int ...
除了无法访问它的大小和不能使用索引来获得它的子变量:集合可以看作只能由<#list...>指令使用的受限sequences。 5、 方法:通过传递的参数进行计算,以新对象返回结果 方法变量通常是基于给出的参数计算值在数据...
<sex>girl</sex><!--这个sex和teacher根元素中的sex发生命名冲突--> </student> </teacher> 2、名域的声明 (1)直接定义 xmlns:名域前缀="名域的URI"(唯一性) 类比:名字与身份证 名域的使用,名域...
使用NuGet下载: 概述.NET中有很多实现IList<T>接口的类,包括T[] , List<T>和ObservableCollection<T> 。 但是, IList<T>接口实际上是受限制的,并且其大多数子类仅支持很少的操作。 只有List<T>类具有一套不错...
1.9接口.................................................................................................................................................30 <br> 1.10 代表..................................
7.6.10.3 集合初始值设定项 171 7.6.10.4 数组创建表达式 172 7.6.10.5 委托创建表达式 174 7.6.10.6 匿名对象创建表达式 175 7.6.11 typeof 运算符 177 7.6.12 checked 和 unchecked 运算符 178 7.6.13 默认值...
7.6.10.3 集合初始值设定项 171 7.6.10.4 数组创建表达式 172 7.6.10.5 委托创建表达式 174 7.6.10.6 匿名对象创建表达式 175 7.6.11 typeof 运算符 177 7.6.12 checked 和 unchecked 运算符 178 7.6.13 默认值...
7.6.10.3 集合初始值设定项 171 7.6.10.4 数组创建表达式 172 7.6.10.5 委托创建表达式 174 7.6.10.6 匿名对象创建表达式 175 7.6.11 typeof 运算符 177 7.6.12 checked 和 unchecked 运算符 178 7.6.13 默认值...
7.6.10.3 集合初始值设定项 171 7.6.10.4 数组创建表达式 172 7.6.10.5 委托创建表达式 174 7.6.10.6 匿名对象创建表达式 175 7.6.11 typeof 运算符 177 7.6.12 checked 和 unchecked 运算符 178 7.6.13 默认值...