`
senton
  • 浏览: 206684 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

深入探讨java集合类

    博客分类:
  • J2SE
阅读更多
不同的集合在添加对象时的处理是不同的:
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);  
    }

}
分享到:
评论

相关推荐

    java集合类的代码

    下面我们将深入探讨Java集合类的一些关键知识点: 1. **ArrayList和LinkedList**: - `ArrayList`:基于动态数组实现的集合,适合频繁的随机访问,但插入和删除元素时效率较低,因为需要移动大量元素。 - `...

    java 集合类讲解

    在本讲解中,我们将深入探讨Java集合类的基本原理、特性以及如何在实际开发中灵活运用。 首先,我们要理解Java集合类的核心接口。`Collection`是最基础的接口,所有的集合都继承自它。`List`接口扩展了`Collection`...

    java集合类的相关资料

    本资料包含“集合类.doc”和“java_集合.pdf”,旨在深入探讨Java集合类的相关知识。 首先,Java集合框架的核心接口包括List、Set、Queue和Map。这些接口定义了各种集合的行为,而具体的实现类则提供了实际的数据...

    Java基础----集合类汇总

    本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...

    Java(Collection_List_Map_Set).rar_java集合类详解

    本篇文章将深入探讨Java集合类,包括Collection、List、Map和Set,以及它们之间的关联和排序机制。 首先,让我们从Collection接口开始。Collection是最基本的集合接口,它是所有集合类的父接口。Collection接口定义...

    java集合类

    本文将深入探讨Java集合类的主要组成部分,包括接口、实现类以及它们之间的关系。 首先,我们来了解集合框架的核心接口。Java集合框架主要包括以下接口: 1. `Collection`:这是所有集合的父接口,定义了集合的...

    你还在对Java中的集合类的关系混淆不清吗

    本文将深入探讨Java集合类之间的关系,帮助你理清疑惑,让你在处理数据存储时更加得心应手。 首先,Java集合框架主要分为两大接口:`List` 和 `Set`,它们都继承自根接口 `Collection`。`List` 接口要求元素有序,...

    关于java的集合类

    在这个主题中,我们将深入探讨Java集合类的关键知识点。 1. **集合接口**: - `List`:有序的集合,允许重复元素,并保持插入顺序。典型实现有`ArrayList`和`LinkedList`。 - `Set`:不允许重复元素的集合。常见...

    集合类泛型类

    本文将深入探讨Java集合类泛型的相关知识点,帮助你更好地掌握这个核心概念。 首先,让我们从基础开始。Java集合框架是Java API的一个重要组成部分,它提供了一组接口和实现这些接口的类,用于存储和操作对象的集合...

    Java集合排序及java集合类详解

    在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java集合主要分为两大类:List(列表)和Set(集)。List是一个有序的集合,允许元素重复,并且可以...

    Java集合关系

    本文将深入探讨Java集合类之间的关系,包括Map、Set、List和Vector,以及它们各自的特点和使用场景。 首先,我们来看标题中的“Java集合关系”。Java集合框架是一个接口和类的集合,它们提供了对对象集合的各种操作...

    深入Java集合学习系列

    这个学习系列将深入探讨Java集合框架的几个关键组件,包括ArrayList、HashMap以及LinkedHashMap。以下是对这些主题的详细解释: 首先,我们来看ArrayList。ArrayList是Java集合框架中的一种线性数据结构,属于List...

    java类的源代码文件

    下面我们将深入探讨Java集合类的相关知识点: 1. **List接口**:List是一个有序的集合,允许重复元素,并且元素都有其特定的位置。ArrayList和LinkedList是List接口的主要实现类。ArrayList基于动态数组,适用于...

    java集合类学习笔记.doc

    ### Java集合类学习笔记知识点详解 #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,容器是用于存储和管理对象集合的重要工具。当我们处理大量的对象时,比如存储多个员工的信息,仅仅依赖于基本的...

    java集合类总结

    本文将对Java集合框架中的Collection接口及其相关接口、类进行深入的探讨。 首先,Collection接口是所有单值容器的基础,它是Set、List和Queue接口的父接口。Collection接口定义了通用的操作方法,如`add()`用于...

    Java 集合类 简单Demo

    本示例主要探讨的是Java集合类的简单使用,通过一个名为`CollectionsTest.java`的文件进行演示。这篇博客文章可能详细解释了如何创建、操作和理解Java集合类的基本概念。 首先,Java集合框架主要包括接口和实现这些...

    JAVA集合类幻灯片

    下面我们将深入探讨Java集合框架的核心概念和关键组件。 首先,`Collection`是集合框架的顶层接口,它是所有集合类的基类。尽管Java标准库没有提供直接实现`Collection`接口的类,但它的子接口如`Set`和`List`提供...

    Java Android开发:深入解析Java集合框架及其应用场景

    其次,探讨了这些集合类的内部实现原理和性能特点。最后,通过实际代码示例展示了集合框架在Android开发中的应用,如图片和布局资源管理、事件监听器管理等。 适合人群:具备Java编程基础的Android开发者,特别是...

    总结Java集合类操作优化经验

    这篇文章将深入探讨Java集合类的操作优化经验,特别是在JDK7环境下。 首先,我们要理解Java集合框架的基础,即`Collection`接口。它是所有集合类型的根接口,表示一组对象,即元素。`Collection`接口提供了基础的增...

Global site tag (gtag.js) - Google Analytics