- 浏览: 205740 次
- 性别:
- 来自: 紫禁城
文章分类
最新评论
-
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 1159Ubuntu 下 JDK+Tomcat+MySql ... -
Eclipse下切换 SVN 中已经保存的用户名和密码
2009-09-22 10:28 17361. 把 C:\Documents and Set ... -
Java实现汉字转换为拼音
2006-10-31 13:15 617import java.util.HashMap;import ... -
Java中的克隆(Clone)机制
2007-08-03 09:03 637现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个 ... -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
2008-12-16 10:32 737在多线程大师Doug Lea的贡献下,在JDK1.5中加入 ... -
Java读取Properties文件的六种方法
2009-04-16 09:34 734使用J2SE API读取Properties文件的六种方法 ... -
递归在java语言中的应用
2006-08-25 09:21 1035一 . 两个小经验 1.在定义一个类时,不要随意定义成员变量 ... -
java类装载器
2006-08-25 18:36 866一 . 面向接口编程. 不要面向类编程. 二 . 关于异常:如 ... -
几个Java基础知识
2006-08-25 19:18 678一 . Hashtable和HashMap Hashtab ... -
面向方面的编程(AOP)
2006-08-25 19:33 741面向对象的编程(OOP)中 ... -
Collection与UML学习
2006-09-01 19:19 702一 . 属性<property>时须注意:1. & ... -
反射和代理
2006-09-01 19:23 711一. 关于数据库.当今的数据处理大致可以分成两大类:联机事务处 ... -
Jdk1.5的新语法和一些java学习的小知识点
2006-09-01 19:30 1226一.1. 操作系统执行具体 ... -
使用DatabaseMetaData和ResultSetMetaData查看数据库信息
2006-10-07 22:26 944/**DatabaseMetaData接口查看数据库的整体综合 ... -
自己动手写数据库连接池
2006-10-07 22:28 1045在前面的文章中已经说过使用连接池的很多好处和优势,也曾讨论过怎 ... -
BASE64编码
2006-10-24 08:39 13211.HttpServletRequest: 请求 ... -
一个实现MD5的简洁的java类
2006-10-28 22:27 658一个实现MD5的简洁的java类 package test; ... -
使用Java将Word转为Html或txt!
2006-10-31 13:47 1228package org.client; // 使用Java将W ... -
理解接口
2006-11-01 14:12 548... -
正则表达式中问号等特殊字符的转义
2006-11-10 00:26 2493正则表达式中问号等特殊字符的转义 除 .$ ^ { [ ( | ...
相关推荐
下面我们将深入探讨Java集合类的一些关键知识点: 1. **ArrayList和LinkedList**: - `ArrayList`:基于动态数组实现的集合,适合频繁的随机访问,但插入和删除元素时效率较低,因为需要移动大量元素。 - `...
在本讲解中,我们将深入探讨Java集合类的基本原理、特性以及如何在实际开发中灵活运用。 首先,我们要理解Java集合类的核心接口。`Collection`是最基础的接口,所有的集合都继承自它。`List`接口扩展了`Collection`...
本资料包含“集合类.doc”和“java_集合.pdf”,旨在深入探讨Java集合类的相关知识。 首先,Java集合框架的核心接口包括List、Set、Queue和Map。这些接口定义了各种集合的行为,而具体的实现类则提供了实际的数据...
本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...
本篇文章将深入探讨Java集合类,包括Collection、List、Map和Set,以及它们之间的关联和排序机制。 首先,让我们从Collection接口开始。Collection是最基本的集合接口,它是所有集合类的父接口。Collection接口定义...
本文将深入探讨Java集合类的主要组成部分,包括接口、实现类以及它们之间的关系。 首先,我们来了解集合框架的核心接口。Java集合框架主要包括以下接口: 1. `Collection`:这是所有集合的父接口,定义了集合的...
本文将深入探讨Java集合类之间的关系,帮助你理清疑惑,让你在处理数据存储时更加得心应手。 首先,Java集合框架主要分为两大接口:`List` 和 `Set`,它们都继承自根接口 `Collection`。`List` 接口要求元素有序,...
在这个主题中,我们将深入探讨Java集合类的关键知识点。 1. **集合接口**: - `List`:有序的集合,允许重复元素,并保持插入顺序。典型实现有`ArrayList`和`LinkedList`。 - `Set`:不允许重复元素的集合。常见...
本文将深入探讨Java集合类泛型的相关知识点,帮助你更好地掌握这个核心概念。 首先,让我们从基础开始。Java集合框架是Java API的一个重要组成部分,它提供了一组接口和实现这些接口的类,用于存储和操作对象的集合...
在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java集合主要分为两大类:List(列表)和Set(集)。List是一个有序的集合,允许元素重复,并且可以...
本文将深入探讨Java集合类之间的关系,包括Map、Set、List和Vector,以及它们各自的特点和使用场景。 首先,我们来看标题中的“Java集合关系”。Java集合框架是一个接口和类的集合,它们提供了对对象集合的各种操作...
这个学习系列将深入探讨Java集合框架的几个关键组件,包括ArrayList、HashMap以及LinkedHashMap。以下是对这些主题的详细解释: 首先,我们来看ArrayList。ArrayList是Java集合框架中的一种线性数据结构,属于List...
下面我们将深入探讨Java集合类的相关知识点: 1. **List接口**:List是一个有序的集合,允许重复元素,并且元素都有其特定的位置。ArrayList和LinkedList是List接口的主要实现类。ArrayList基于动态数组,适用于...
本文将对Java集合框架中的Collection接口及其相关接口、类进行深入的探讨。 首先,Collection接口是所有单值容器的基础,它是Set、List和Queue接口的父接口。Collection接口定义了通用的操作方法,如`add()`用于...
本示例主要探讨的是Java集合类的简单使用,通过一个名为`CollectionsTest.java`的文件进行演示。这篇博客文章可能详细解释了如何创建、操作和理解Java集合类的基本概念。 首先,Java集合框架主要包括接口和实现这些...
下面我们将深入探讨Java集合框架的核心概念和关键组件。 首先,`Collection`是集合框架的顶层接口,它是所有集合类的基类。尽管Java标准库没有提供直接实现`Collection`接口的类,但它的子接口如`Set`和`List`提供...
其次,探讨了这些集合类的内部实现原理和性能特点。最后,通过实际代码示例展示了集合框架在Android开发中的应用,如图片和布局资源管理、事件监听器管理等。 适合人群:具备Java编程基础的Android开发者,特别是...
这篇文章将深入探讨Java集合类的操作优化经验,特别是在JDK7环境下。 首先,我们要理解Java集合框架的基础,即`Collection`接口。它是所有集合类型的根接口,表示一组对象,即元素。`Collection`接口提供了基础的增...