- 浏览: 925490 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (322)
- Hibernate研究&源码 (27)
- Server (10)
- Coder碎语 (64)
- EnglishMulling (11)
- About XML (1)
- persistence (12)
- Core Java & OO (23)
- Java EE (6)
- JavaScript/JSON/Ajax/ext... (22)
- 我的读书笔记 (16)
- Source Codes Study (29)
- workFlow/jBPM (22)
- OFBiz: Open For Business (1)
- 项目积累 (21)
- srcStudy_acegi (1)
- Cache/Ehcache... (9)
- Java Test/JUnit.. (7)
- maven/ant (2)
- 设计模式 (1)
- SOA/cxf/ws-security (2)
- Android (4)
- 云计算/Hadoop (2)
- 加密/签名 (1)
- 正则表达式 (1)
- htmlparser (1)
- 操作系统 (5)
- DB (1)
最新评论
-
天使建站:
这里这篇文章更详细 还有完整的实例演示:js跳出循环 ...
jQuery中each的break和continue -
heshifk:
刚刚我也遇到同样的问题,然后就在纠结为什么不能直接使用brea ...
jQuery中each的break和continue -
masuweng:
不错写的.
集万千宠爱于一身的SessionImpl:get研究(四): Hibernate源码研究碎得(8) -
muzi131313:
这个老是忘,做一下笔记还是挺好的
jQuery中each的break和continue -
lg068:
data = data.replace("\n&qu ...
项目小经验: eval与回车符
Q 16:谈谈你对Java Collections Framework的理解? LF DP FAQ
Q 16:
collections framework对外提供的接口是List,Set and Map.List和Set继承自Collection接口.不要把Collection这个接口和Collections这个类搞混了,这个Collections类与Arrays类似,也是一个工具类.
Set(HashSet,TreeSet):
在Set我们不能放入重复的元素,HashSet和TreeSet是这个接口的两个实现类,TreeSet是一个有序的HashSet,这个类实现了SortedSet接口.
List(ArrayList,LinkedList,Vector etc):
List是一个有序的collection,它里面可以放入重复的元素.ArrayList,LinkedList和Vector三个类都是List接口的实现类.
Collections API同时也支持maps,但并不在Collection接口所在类hierarchy.在Java中,Map描述的是这样一个对象,它将keys映射到values,这里的list of keys本身是就是一个Collection object.Map中可以包含重复的values,不过map中的keys必须互异.HashMap,TreeMap和Hashtable都是Map接口的实现类.TreeMap是一个有序的HashMap,它实现了SortedMap接口.
Q. 怎么来实现有序的collection? SortedSet和SortedMap两个接口可以maintain sorted order.Comparable接口的实现类impose natural order(这个natural ordering是什么意思?与这里的SortedMap和SortSet有什么关系?这两个SortedSet和SortedMap两个接口与Comparable又有什么关系?在sort方法里会调用natural ordering的特性?).通过实现Comparable接口,排序一个array of objects或一个collection(List etc)可以像下面代码所示那样简单:
Arrays.sort(myArray);
Collections.sort(myCollection);//这里的myCollection实现了Comparable接口么?
若一个类没实现Comparable接口,或想可以按multiple attributes来排序,我们要用Comparator接口.
Comparable接口:
1,利用Comparable接口可以比较其实现类与别的相似对象(i.e. A class that implements Comparable becomes an object to be compared with).Comparable里有compareTo()这个方法需要实现.
2,Java类库中像String,Integer,Date,File等这样的standard类都实现Comparable接口,从而就用了"Natural Ordering".例如,String类用下面的方法:
public int compareTo(o)
public int compareToIgnoreCase(str)
在自写类中也可以如下所示地实现Comparable接口
...imports
public class Pet implements Comparable {
int petId;
String petType;
public Pet(int argPetId,String argPetType) {
petId = argPetId;
this.petType = argPetType;
}
public int compareTo(Obejct o){
Pet petAnother (Pet) o;
//natural alphabetical ordering by type
return this.petType.compareTo(petAnother.petType);
}
public static void main(String[] args){
List list = new ArrayList();
list.add(new Pet(2,"Dog"));
list.add(new Pet(1,"Parrot"));
list.add(new Pet(2,"Cat"));
Collections.sort(list); // sorts using compareTo method
for(Iterator it = list.iterator();it.hasNext();){
Pet e = (Pet) it.next();
System.out.println(e);
}
}
public String toString(){
return petType;
}
}
Output: Cat, Dog, Parrot.
Comparator interface:
1,利用Comparator接口可以比较两个不同类型的对象.Comparator里有以下的方法需要实现:
public int compare (Object o1, Object o2)
2,通过自写Comparator类,我们就可以有更多的关于排序的控制.下面我们用Comparator来重写Pet类的排序.For most cases natural ordering is fine(这就是前面所说的sort方法里所提到的natural ordering了,哈哈...明白了!!!),but say we require a special scenario where we need to first sort by the "petId" and then by "petType".We can achieve this by writting a "Comparator" class.
...imports
public class PetComparator implements Comparator,Serializable{
public int compare(Object o1, Object o2){
int result = 0;
Pet pet = (Pet) o1;
Pet petAnother = (Pet)o2;
//use Integer class's natural ordering
Integer pId = new Integer(pet.getPatId());
Integer pAnotherId = new Integer(petAnother.getPetId());
result = pId.compareTo(pAnotherId);
//if ids are same compare by petType
if(result ==0){
result = pet.getPetType().compareTo(petAnother.getPetType());
}
return result;
}
public static void main (String[] args) {
List list = new ArrayList();
list.add(new Pet(2,"Dog"));
list.add(new Pet(1,"Parrot"));
list.add(new Pet(2,"Cat"));
Collections.sort(list,new PetComparator());
for(Iterator it = list.iterator();it.hasNext();){
Pet e = (Pet) it.next();
System.out.println(e);
}
}
public String toString(){
return petType;
}
}
Output: Parrot,Cat,Dog.
Important: The ordering imposed by a java.util.Comparator "myComp" on a set of elements "mySet" should be consisent with equals() method,which means for example:
if compare(o1,o2) ==0 then o1.equals(02) should be true.
if compare(o1,o2) !=0 then o1.equalt9o2) should be false.
If a comparator "myComp" on a set of elements "mySet" is inconsistent with equals() method, then SortedSet or SortedMap will behave strangely and is hard to debug.(这仅仅是一种编程约定,那在语言层面上没有对此的限定么?似乎有不妥的地方吧,最好是能在编译器层面上对这个的检查.)例如,if you add two objects o1, o2 to a TreeSet (implements SortedSet) such that o1.equals(o2) == true and compare(o1,o2) != 0 the second add operation will return false and will not be added to your set because o1 and o2 are equivalent from the TreeSet’s perspective. 若我们想往TreeSet添加两个对象(o1和o2),而这个对o1和o2来说o1.equals(o2)为true并且compare(o1,o2) !=0的话,对TreeSet添加第二个元素就会返回false,这个添加也不会成功,由于这里的o1和o2在TreeSet看来并不相等.(噢,这个add的方法返回false有很大的作用呀!以前可是没有注意过这事,这样也就弥补了前面所说的"编译器层面检查"上的不足.以后往TreeSet里通过调用add方法添加Object时可得check这个的返回值是否为false!!!).
Design Pattern:
Q. What is an Iterator? An Iterator is a use once object to access the objects stored in a collection.Iterator design pattern is used, which is a behaviroal design pattern that provides a way to access elements of a collection sequentialy without exposing its internal representation.(呵呵,这个Iterator现在也理解多了,对Java的伟大也更为敬重了!)
Q. why do you get a ConcurrentmodificationException when using an iterator? CO
发表评论
-
JavaPersistenceWithHibernate读书笔记(6)--持久层与另外可用替代方案
2008-04-06 17:21 16711.3 Persistence layers and alte ... -
<Java.JavaEE面试整理>(12) 对Collections FrameWork的理解(二)
2008-04-06 15:27 2874<Java.JavaEE面试整理>(12) 对Co ... -
写博一月后的收获与反思(1)
2008-04-05 17:26 1659写博一月后的收获与反思开始安下心来写博到现在,细想一下也有一个 ... -
<Java.JavaEE面试整理>(9)--抽象类与接口有什么区别?以及如何选择?
2008-04-03 15:17 1911"abstract class" or & ... -
<Java.JavaEE面试整理>(8) --基于什么考虑,Java 1.4中引入Assert???
2008-04-03 11:44 1417Q 11: What is design by contrac ... -
JavaPersistenceWithHibernate读书笔记(4)
2008-04-03 10:41 21391.2.4 Problems relating to asso ... -
JavaPersistenceWithHibernate读书笔记(3)
2008-04-02 17:25 17571.2.2 The problem of subtypes ... -
<Java.JavaEE面试整理>(7) --Polymorphism之深入理解(二)
2008-04-02 14:31 1505Q. Why would you prefer code re ... -
<Java.JavaEE面试整理>(6) --Polymorphism之深入理解(一)
2008-04-02 12:14 2066Q 10:请谈谈你对多态,继承,封装和动态绑定(dynamic ... -
<Java.JavaEE面试整理>(5)
2008-04-01 08:49 1901Q 09: 请谈谈你对'is a'和'has a'的理解?也就 ... -
JavaPersistenceWithHibernate读书笔记(2)
2008-03-31 19:24 1185JavaPersistenceWithHibernate读书笔 ... -
<Java.JavaEE面试整理>(4)
2008-03-31 18:54 1439Q 06:Java中构造方法与其它常规方法有什么区别?要是你没 ... -
<Java.JavaEE面试整理>(3)
2008-03-30 16:31 1867Q 04: 怎么用Java里的Pack ... -
JavaPersistenceWithHibernate读书笔记(1)
2008-03-30 14:14 1785Part 1: Getting started with Hi ... -
<Java.JavaEE面试整理>(2)
2008-03-29 15:14 1823Java.J2EE.Job.Interview.Compani ...
相关推荐
├<阶段1 java语言基础> │ ├<1-1-Java基础语法> │ ├<1-2 -面向对象和封装> │ └<1-3-Java语言高级> ├<阶段2 JavaWeb·> │ ├<01 HTML和CSS> │ ├<02 JavaScript> │ ├<03 BootStrap> │ ├<04 XML> │ ├...
<groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- spring事务管理 --> <dependency> <groupId>org.springframework</...
一个变态的jar包,按照我当前的工程环境,应该在weblogic8底下,但就是找不到,所以只好在网上找了,记录在这里。 包含的类: org.apache.cactus.server.ServletTestRedirector
<groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.1.RELEASE</version> </dependency> <!-- Log4j --> <dependency> <groupId>log4j</groupId> <artifactId>...
<groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.19</version> </dependency> <!-- SpringMVC --> <dependency> <groupId>org.springframework</groupId> ...
在开发Java Web应用程序时,Spring MVC是一个非常流行的框架,它提供了强大的模型-视图-控制器架构,便于构建可维护和可扩展的Web应用。本文将详细介绍如何使用IntelliJ IDEA和Maven构建一个简单的Spring MVC项目。 ...
02.<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ...
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <!-- 默认找的文件名 --> </listener> <!-- Context Configuration locations for Spring XML files --> <context...
在本文中,我们将深入探讨如何将Apache CXF与Spring框架集成,通过具体的Java代码实例来阐述这一过程。CXF是一个开源服务框架,它允许开发者创建和消费Web服务,而Spring框架则是一个强大的应用开发框架,提供了依赖...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本教程中,我们将详细介绍如何搭建一个基本的 Spring MVC 示例...
Java和JavaEE技术面试题是求职者准备面试的重要参考资料,涵盖了广泛的Java基础知识、JSP、Servlet、EJB、数据库、设计模式等多个领域。以下是对这些知识点的详细解释: 1. **面向对象的特征**:封装、继承、多态是...
JavaEE是企业级应用开发的重要框架,它基于Java平台,为构建分布式、多层的Web应用程序提供了全面的解决方案。这份“javaee面试题集锦”涵盖了广泛的JavaEE相关知识点,对于求职者或开发者来说,是提升技能和准备...
<groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.23</version> </dependency> <!-- Servlet API --> <dependency> <groupId>javax.servlet</groupId> ...
《从Java走向JavaEE》这本书的附带代码资源旨在帮助初学者逐步理解并掌握Java企业级应用开发。Java和JavaEE是两个不同的概念,Java是一种广泛使用的编程语言,而JavaEE(Java Platform, Enterprise Edition)是Java...
<name>Java Maven Hello World</name> <dependencies> <!-- 添加必要的依赖,例如Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>...
<servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.VelocityViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>velocity</servlet-name> ...
【描述】:这是一份精心整理的JAVA和JAVAEE面试题集锦,包含了我在多次面试过程中遇到的各类问题,旨在为准备面试的朋友提供全面且实用的参考资料。这份文档将帮助你深入了解Java编程语言以及Java Enterprise ...
JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. ...
JavaEE面试宝典是每一位Java开发者在求职过程中必备的参考资料,涵盖了从基础知识到高级技术的全方位面试准备。这里,我们将深入探讨其中的关键知识点,帮助你更好地理解和掌握。 首先,我们从基础开始。Java语言的...
除此之外,JavaEE API还包含了很多其他组件和服务,如JTA(Java Transaction API)、JAF(JavaBeans Activation Framework)、JCA(Java Connector Architecture)等。所有这些组件协同工作,为开发者提供了构建复杂...