频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
java集合框架详解
2015-10-10 09:05:51           
收藏   我要投稿
集合框架

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;
    }    
}

 


点击复制链接 与好友分享!回本站首页
相关TAG标签 框架
上一篇:Java线程小结
下一篇:java中long和Long的区别
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站