java集合框架详解

集合框架
Collection
        |--List集合,元素是有序的(存入和取出的顺序),且可以有重复元素,因为该集合体系有索引。
              |--ArrayList集合,底层数据是数组结构,特点:查询快,增删慢。线程是不同步。
              |--LinkedList集合,底层数据是链表结构,特点:增删快,查询慢。线程不同步
              |--Vector集合,底层数据是数组结构。线程是同步的。已被ArrayList集合替代。
                
        |--Set集合,元素是无序的(存入和取出的顺序),不可以有重复元素。
              |--HashSet集合,底层数据是hash表结构。
                  HashSet集合元素的唯一性通过hashCode()和equals()方法决定,如果元素的hash值 

                  不同,则判断equals是否为true。
              |--TreeSet集合,底层数据是二叉树表结构,可以对Set集合中的元素按照一定的顺序排序。

                  保证元素的唯一性通过,compareTo()方法return 0。

                 

   TreeSet排序第一种方式:

   让TreeSet集合里的对象具备比较性,自定义对象需要实现comparable接口,覆盖

   compareTo()方法。排序时,当主要条件相同时,一定要判断次要条件。


   TreeSet排序第二种方式:

   当元素不具备比较性时,则需要TreeSet集合具备比较性。在集合初始化时,就有了比较方

   式。定义一个类实现comparator接口,覆盖compare()方法,以return 0来保证是否相同。

   当两种排序都存在时,以第2种为主。

 

import java.util.*;
class TreeSetDemo2{
    public static void main(String[]args){
        TreeSet ts = new TreeSet(new MyCompare());             
        //因为add方法为集合框架特有,为容器增加元素,元素就是new出的对象
        //所以要add三个元素,就要new三次,应该如下写
        ts.add(new Student("李四1",21));
        ts.add(new Student("李四4",26));
        ts.add(new Student("李四2",22));
        ts.add(new Student("李四4",25));
        ts.add(new Student("李四3",23));
        
        Iterator it = ts.iterator();
        while(it.hasNext()){
            Student su = (Student)it.next();      
            System.out.println(su.getName()+","+su.getAge());
        }        
    }
}

class Student  implements Comparable//该接口强制让实现的子类局部比较性
{
    private int age;
    private String name;
    Student(String name,int age){
        this.name = name ;
        this.age = age;    
    }    
    //复写Comarapble接口中的compareTo()方法
    public int compareTo(Object obj){
        //判断类是不是学生类,如果不是抛出异常。
        //return 1;
        if(!(obj instanceof Student))
            throw    new RuntimeException("不是学生对象!");        
        Student su = (Student)obj;
        //按照年龄排序
        if(this.age - su.age>0)
            return 1;
        else if(this.age - su.age < 0) 
            return -1;
        else {
            //System.out.println("asd:"+this.name.compareTo(su.name));
            return this.name.compareTo(su.name);
        }
             
    }    
    public String getName(){
        return name;    
    }    
    public int getAge(){
        return age;    
    }
}
//自定义一个比较器
class MyCompare implements Comparator{
    public int compare(Object o1,Object o2){    
        //对对象判断                
        if(!(o1 instanceof Student && o2 instanceof Student))    
            throw new RuntimeException("比较的不是学生对象!");
            
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;    
        int num = s1.getName().compareTo(s2.getName());
        //当姓名相等的时候,判断年龄
        if(num==0){
            return s1.getAge()  - s2.getAge();
        }else 
            return num;
    }    
}


本文出自 “司马��” 博客,转载请与作者联系!

你可能感兴趣的:(java,集合框架)