Java集合之Collection

|————Collection接口:单列数据,定义了存取一组数据对象的方法的集合
           |————List接口:元素有序、可重复的集合     
                          |————ArrayList、LinkedList、Vector
           |————Set接口:存储无序、不可重复数据
                         |————HashSet Set接口主要实现类,线程不安全的,可以存储null值
                                        |————LinkedHashSet 作为HashSet的子类,遍历内部数据时,可以按照添加的顺序遍历
                         |————TreeSet 可以按照添加对象的指定属性 进行排序

  比较
  1、数据结构:
  2、线程安全:
  3、执行效率:
  4、内存空间:
=====================================
List:接口
   ArrayList:底层是Object[]数组,随机查询效率高,插入、删除受时间复杂度影响O(n-1),顺序添加效率高O(1),非同步,扩容机制是原有的1.5倍,并把原有数据放到扩容后的新数组
              jdk1.7 new的时候会创建一个默认长度长度为10的数组
              jdk1.8 new的时候不会创建调方法时会创建默认长度为10的数组
   LinkedList:底层是双向链表,多了两个指针,直接前驱和直接后继(JDK1.7及以后取消了循环),添加、删除、修改效率高,链表存储,非同步
   Vector:底层是Object[]数组,数组存储,底层方法加了synchroize锁的同步方法

==========================================
Set:接口
  HashSet:HashSet底层是数组加链表结构,默认长度16
         LinkedHashSet:是HashSet的子类,,添加数据的同时增加了双向链表的特性先后添加的元素有顺序的指向,所以可以按顺序遍历出来,比HashSet遍历效率高
 TreeSet:相同类的对象两种排序方式:自然排序 和 定制排序
                 自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,不在是equals()  
                 定制排序中:比较两个对象是否相同的标准为:compare()返回0,不在是equals()

    要求:向set中添加的数据,其所在的类一定要重写hashCode()方法和equals()

     //  TreeSet  按照姓名从小到大排序,会出现问题当姓名一样年龄不同的时候会添加失败
    //    解决办法:实现类实现complable中重写compareTo方法
    @Override
    public int compareTo(Object o) {
        if (o instanceof Student) {
            Student s = (Student) o;
            int compare=-this.name.compareTo(s.name);
            if (compare!=0){
                return compare;
            }else {
                return Integer.compare(this.age,s.age);
            }
        } else {
            throw new RuntimeException("类型错误");
        }
    }


    //    按照年龄从小到大排序
    Comparator com = new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            if (o1 instanceof StudentSet && o2 instanceof StudentSet) {
                StudentSet s1 = (StudentSet) o1;
                StudentSet s2 = (StudentSet) o2;
                return Integer.compare(s1.getAge(), s2.getAge());
            } else {
                throw new RuntimeException("类型错误");
            }
        }
    };
    TreeSet treeSet = new TreeSet(com);
    treeSet.add(new StudentSet(15, "李四"));
    treeSet.add(new StudentSet(16, "李四"));
    treeSet.add(new StudentSet(17, "李四"));
    Iterator iterator = treeSet.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }

其中: Comparable接口里面的方法是 public int compareTo(T o); 在java.lang包下
            Comparator接口里面的方法是 int compare(T o1,T o2); 在java.util包下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值