- 浏览: 200497 次
- 性别:
- 来自: 紫禁城
文章分类
最新评论
-
a1439226817:
<!doctype html><html l ...
发布一个支持N级下拉列表联动的控件 -
a1439226817:
也不高个测试的demo,别人怎么用啊
发布一个支持N级下拉列表联动的控件 -
davaidgao:
不全啊,这是
Spring3.x权威开发指南 -
caizi12:
对于map绑定很是不方便,现在的做法,需要创建一User类,再 ...
浅谈 SpringMVC 数据绑定 -
joeyhuang:
不全啊..
Spring3.x权威开发指南
不同的集合在添加对象时的处理是不同的:
Set:不允许重复,且没有指定顺序,HashSet在添加新对象时,首先比较对象的hashcode值,如果相等再比较两个对象是否相等,如果是则不添加,否则添加,并且按hashCode值排序.
List:允许重复且有指定顺序,ArrayList和Vector都是这样的类,如果你不指定顺序它就默认按先后顺序排序.
下面是两个简单的例子:
(1):
import java.util.*;
public class TestTree {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new MyComparator());
ts.add(new Person(33,160));
ts.add(new Person(23,170));
ts.add(new Person(45,180));
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println (it.next());
}
}
}
//定义一个比较器类,实现Comparator接口.
class MyComparator implements Comparator {
public int compare(Object obj1,Object obj2){
Person p1 = (Person)obj1;
Person p2 = (Person)obj2;
return (p1.age > p2.age ? 1 : (p1.age == p2.age ? 0 : -1));
}
}
class Person {//implements Comparable
public int age;
public int height;
public Person(int age,int height){
this.age = age;
this.height = height;
}
public String toString(){
return (this.age + " : " + this.height);
}
//重写Comparable接口的compareTo方法
/*
public int compareTo(Object obj){
if(obj instanceof Person){
Person p = (Person)obj;
return (this.height > p.height ? 1 : (this.height == p.height ? 0 : -1));
}
return 1;
}*/
}
(2).
import java.util.*;
public class TestHashSet{
public static void main(String[] args){
HashMap<String,String> hm = new HashMap<String,String>();
hm.put("a","aaa");
hm.put("b","bbb");
hm.put("c","ccc");
//第一种取值的方法
Set s = hm.keySet();
Iterator e = s.iterator();
while(e.hasNext()){
Object o = e.next();
System.out.println (o + ":" + hm.get(o));
}
//第二种方法
Set<Map.Entry<String,String>> ss = hm.entrySet();
for(Map.Entry<String,String> me : ss){
System.out.println (me.getKey() + ":" + me.getValue());
}
//jdk1.5 里面新增的泛型使用示例,指明hs集合里面只能存Student对象。
HashSet<Student> hs = new HashSet<Student>();
hs.add(new Student("zhangsan",30));
hs.add(new Student("zhangsan",30));
//hs.add(new String("这样添加一个对象会出错误"));
//尽管调用了两次add方法,但是因为Student类里面重写了equals方法。
//所以最终hs的大小是1,
System.out.println (hs.size());
//想取出hs集合里面的对象时可以象下面这样,如此一来在循环里面去数
//据时就可以指定用Student类型的对象来接收Iterator里面的对象了。
/*
Iterator<Student> itr = hs.iterator();
while(itr.hasNext()){
Student obj = itr.next();
System.out.println (obj);
}
*/
//jdk1.5 里面for循环的增强,此方法和C#里面的foreach语法相似,只不过
//在java里面是用 ":" ,而在C#里面是用 "in"。":"后面的只能是数组或者集合。如果
//循环体类的数据对象名或者其他数据类型在外面定义就会报编译错误。
for(Student stu : hs){
System.out.println (stu);
}
//下面打印出两个Student对象的hashCode值,结果是相等的。
//因为Student类里面重写了hashCode方法。
System.out.println (new Student("zhangsan",19).hashCode());
System.out.println (new Student("zhangsan",19).hashCode());
}
}
class Student{
private String name;
private int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
//jdk1.5里面新增的标注:@Override指明要覆盖父类的方法。注意:@Override的O是大写。
@Override
public boolean equals(Object obj)
//判断传进来的Object对象是不是Student类型的对象
if(obj instanceof Student) {
Student stu = (Student)obj;
return ((this.name.equals(stu.name)) && (this.age == stu.age));
}
return false;
}
public int hashCode(){
return (this.age + this.name.hashCode());
//注意基本数据类型没有哈希码值。
}
public String toString(){
return (this.name + ":" + this.age);
}
}
Set:不允许重复,且没有指定顺序,HashSet在添加新对象时,首先比较对象的hashcode值,如果相等再比较两个对象是否相等,如果是则不添加,否则添加,并且按hashCode值排序.
List:允许重复且有指定顺序,ArrayList和Vector都是这样的类,如果你不指定顺序它就默认按先后顺序排序.
下面是两个简单的例子:
(1):
import java.util.*;
public class TestTree {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new MyComparator());
ts.add(new Person(33,160));
ts.add(new Person(23,170));
ts.add(new Person(45,180));
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println (it.next());
}
}
}
//定义一个比较器类,实现Comparator接口.
class MyComparator implements Comparator {
public int compare(Object obj1,Object obj2){
Person p1 = (Person)obj1;
Person p2 = (Person)obj2;
return (p1.age > p2.age ? 1 : (p1.age == p2.age ? 0 : -1));
}
}
class Person {//implements Comparable
public int age;
public int height;
public Person(int age,int height){
this.age = age;
this.height = height;
}
public String toString(){
return (this.age + " : " + this.height);
}
//重写Comparable接口的compareTo方法
/*
public int compareTo(Object obj){
if(obj instanceof Person){
Person p = (Person)obj;
return (this.height > p.height ? 1 : (this.height == p.height ? 0 : -1));
}
return 1;
}*/
}
(2).
import java.util.*;
public class TestHashSet{
public static void main(String[] args){
HashMap<String,String> hm = new HashMap<String,String>();
hm.put("a","aaa");
hm.put("b","bbb");
hm.put("c","ccc");
//第一种取值的方法
Set s = hm.keySet();
Iterator e = s.iterator();
while(e.hasNext()){
Object o = e.next();
System.out.println (o + ":" + hm.get(o));
}
//第二种方法
Set<Map.Entry<String,String>> ss = hm.entrySet();
for(Map.Entry<String,String> me : ss){
System.out.println (me.getKey() + ":" + me.getValue());
}
//jdk1.5 里面新增的泛型使用示例,指明hs集合里面只能存Student对象。
HashSet<Student> hs = new HashSet<Student>();
hs.add(new Student("zhangsan",30));
hs.add(new Student("zhangsan",30));
//hs.add(new String("这样添加一个对象会出错误"));
//尽管调用了两次add方法,但是因为Student类里面重写了equals方法。
//所以最终hs的大小是1,
System.out.println (hs.size());
//想取出hs集合里面的对象时可以象下面这样,如此一来在循环里面去数
//据时就可以指定用Student类型的对象来接收Iterator里面的对象了。
/*
Iterator<Student> itr = hs.iterator();
while(itr.hasNext()){
Student obj = itr.next();
System.out.println (obj);
}
*/
//jdk1.5 里面for循环的增强,此方法和C#里面的foreach语法相似,只不过
//在java里面是用 ":" ,而在C#里面是用 "in"。":"后面的只能是数组或者集合。如果
//循环体类的数据对象名或者其他数据类型在外面定义就会报编译错误。
for(Student stu : hs){
System.out.println (stu);
}
//下面打印出两个Student对象的hashCode值,结果是相等的。
//因为Student类里面重写了hashCode方法。
System.out.println (new Student("zhangsan",19).hashCode());
System.out.println (new Student("zhangsan",19).hashCode());
}
}
class Student{
private String name;
private int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
//jdk1.5里面新增的标注:@Override指明要覆盖父类的方法。注意:@Override的O是大写。
@Override
public boolean equals(Object obj)
//判断传进来的Object对象是不是Student类型的对象
if(obj instanceof Student) {
Student stu = (Student)obj;
return ((this.name.equals(stu.name)) && (this.age == stu.age));
}
return false;
}
public int hashCode(){
return (this.age + this.name.hashCode());
//注意基本数据类型没有哈希码值。
}
public String toString(){
return (this.name + ":" + this.age);
}
}
发表评论
-
Ubuntu下JDK+Tomcat+MySql环境的搭建
2011-06-15 14:48 1125Ubuntu 下 JDK+Tomcat+MySql ... -
Eclipse下切换 SVN 中已经保存的用户名和密码
2009-09-22 10:28 17051. 把 C:\Documents and Set ... -
Java实现汉字转换为拼音
2006-10-31 13:15 595import java.util.HashMap;import ... -
Java中的克隆(Clone)机制
2007-08-03 09:03 615现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个 ... -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
2008-12-16 10:32 713在多线程大师Doug Lea的贡献下,在JDK1.5中加入 ... -
Java读取Properties文件的六种方法
2009-04-16 09:34 706使用J2SE API读取Properties文件的六种方法 ... -
递归在java语言中的应用
2006-08-25 09:21 1013一 . 两个小经验 1.在定义一个类时,不要随意定义成员变量 ... -
java类装载器
2006-08-25 18:36 840一 . 面向接口编程. 不要面向类编程. 二 . 关于异常:如 ... -
几个Java基础知识
2006-08-25 19:18 656一 . Hashtable和HashMap Hashtab ... -
面向方面的编程(AOP)
2006-08-25 19:33 710面向对象的编程(OOP)中 ... -
Collection与UML学习
2006-09-01 19:19 675一 . 属性<property>时须注意:1. & ... -
反射和代理
2006-09-01 19:23 692一. 关于数据库.当今的数据处理大致可以分成两大类:联机事务处 ... -
Jdk1.5的新语法和一些java学习的小知识点
2006-09-01 19:30 1199一.1. 操作系统执行具体 ... -
使用DatabaseMetaData和ResultSetMetaData查看数据库信息
2006-10-07 22:26 928/**DatabaseMetaData接口查看数据库的整体综合 ... -
自己动手写数据库连接池
2006-10-07 22:28 1018在前面的文章中已经说过使用连接池的很多好处和优势,也曾讨论过怎 ... -
BASE64编码
2006-10-24 08:39 12981.HttpServletRequest: 请求 ... -
一个实现MD5的简洁的java类
2006-10-28 22:27 632一个实现MD5的简洁的java类 package test; ... -
使用Java将Word转为Html或txt!
2006-10-31 13:47 1203package org.client; // 使用Java将W ... -
理解接口
2006-11-01 14:12 524... -
正则表达式中问号等特殊字符的转义
2006-11-10 00:26 2463正则表达式中问号等特殊字符的转义 除 .$ ^ { [ ( | ...
相关推荐
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。
提供了20道高难度的Java集合框架面试题及详细答案解析,涵盖了List、Set、Map、Iterator、Collections类等关键概念和操作方法。从数据结构、线程安全性、性能等多个角度深入探讨了集合框架的不同实现和应用场景。...
集合框架的性能和选择: 探讨集合框架中各种实现类的性能比较,讲解如何根据需求选择合适的集合类型。介绍优化集合性能的方法。 集合类型: 详细介绍集合框架中的各种集合类型,包括 List、Set、Map 以及 Queue 等。...
本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代...
字符串(java.lang.String类)的使用 90 字符串相等的判断 92 思考作业 93 上机作业 94 第四章 异常机制 95 导引问题 95 异常(Exception)的概念 96 异常分类 96 Error 97 Error和Exception的区别 97 Exception 97 ...
在相互的基础上,前四部分深入广泛地探讨了各种Java技术,它们可以组合或单独用于为各种数据访问与处理情况开发实际方案。第五部分中的案例研究包括了一些实际的围绕数据的应用程序范例。 本书只需要读者具有Java...
最后,我们还会深入讨论新型和改进过的Java 1.2集合库。 <br>(9) 第9章:违例差错控制 Java最基本的设计宗旨之一便是组织错误的代码不会真的运行起来。编译器会尽可能捕获问题。但某些情况下,除非进入运行期...
Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt...本书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例代码,能够帮助读者充分理解Java语言并灵活应用。
第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁...
面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等原始的编程思 想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法〔即运算〕定义,于 是仁者见仁、智者见智,这样在一定程度上造成了理论...
基于Java的搜索引擎的设计与实现 我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能快速有效地从海量的网络信息中,检索出自己需要的、潜在的、有价值的信息,从而可以有效地在日常...
因为搜索引擎这一技术很好的解决了用户搜索网上大量信息的难题,所以在当今的社会,无论是发展迅猛的计算机行业,还是作为后起之秀的信息产业界,都把Web搜索引擎的技术作为了争相探讨与专研的方向。 搜索引擎的...
26.3.深入探讨 26.3.1.其它类型的通知 26.3.1.1.前置通知 26.3.1.2.后置通知 26.3.1.3.异常通知 26.3.1.4.引入(mixins) 26.3.1.5.通知链 26.3.1.6.配置通知 26.3.2.使用特性定义切入点 26.4.The Spring.NET AOP ...
深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...