zoukankan      html  css  js  c++  java
  • Collection接口

    Collection是接口,提供容器的常用方法

    1) 添加
     a. boolean add(object obj)添加一个元素
     b. boolean addAll(Collection c)将集合c的全部元素添加到原集合元素后返回true
     c. 添加功能永远返回true
    2) 删除
     a. void clear();移除所有元素
     b. boolean remove(Object o)移除一个元素
     c. boolean removeAll(Collection c)移除一个集合的元素,只要有一个被移除就返回true,改变原集合,删除原集合中和c中相同的元素
     d. 删除功能只有删除成功后才返回true
    3) 判断
     a. boolean contain(object o)判断集合中是否包含指定的元素。
     b. boolean containsAll(Collection c)判断原集合中是否包含指定集合c的所有元素,有则true,
     c. boolean isEmpty()判断集合是否为空
    4) 获取
     a. Iterator iterator()迭代器,集合的专用方式,实现遍历的功能
     b. Object next()获取当前元素,并移动到下一个位置
     c. boolean hasNext()判断此位置是否有元素
     d. 迭代器遍历实例在下面
    5) 长度
     a. int size()元素的个数
     b. 数组和字符串中都是length()方法获取元素个数,集合中是size()方法
      因为object包括集合、字符串、数组,所以其不能直接用length方法。
    6) 交集功能boolean retainAll(Collection c)
     两个集合交集的元素给原集合,并判断原集合是否改变,改变则true,不变则false
    7) 把集合转换为数组
     a. Object [] toArray()

    List接口 :有序集合

      ArrayList

      LinkedList

    类似于C++中std::vector 和 std::list

    ArrayList的内部实现是基于基础的对象数组的,LinkedList基于链表的数据结构。 

    对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 

    对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 

    ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下: 

    1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元

    素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

    2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

    3.LinkedList不支持高效的随机元素访问。

    4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

    Set接口 :无序(存储和取出的顺序)和唯一.

      TreeSet 底层数据结构是二叉树(红黑树)

    特点: 元素唯一,且能对元素进行排序

    对自定义数据对象排序时 需要该类实现 Comparable 接口 的compareTo 方法

    1 public class Student implements Comparable<Student> {  
    2
      private String name;
    3   private int age;
    4
      /*
    5
      *其它方法略去
    6
      */
    7
      //重写compareTo方法
    8
      @Override
    9
      public int compareTo(Student o) {
    10     int r = this.getAge()-this.getAge();//通过元素中年龄大小来排序
    11     int r1 = r==0?this.getName().compareTo(o.getName()):r;//如果年龄相同,在根据名字的字典顺序来比较 
    12
    13     return r1;//返回值
    14     //根据返回值的正负 ,0 来存放元素
    15    }
    16 }

      HashSet : 底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构

        若要元素有序则可以使用 LinkedHashSet :链表保证了元素有序,哈希表保证了元素唯一.

    特点: 元素唯一,且能对元素进行去重  

    比较时 只有hashCode一致时才会调用方法equals() 进行比较确定该元素是否唯一

    Student stu1 = new Student("1", "JACK");
    Student stu2 = new Student("1", "JACK");
    Student stu3 = new Student("3", "JIM");
    
    System.out.println(stu1.hashCode());
    System.out.println(stu2.hashCode());

        stu1和stu2的hashCode是不一样的,为什么呢?因为这两个对象是New出来的,引用地址不一样。故不会调用方法equals() 导致元素不唯一;

          就需要重写hashCode()和euqals()方法 

  • 相关阅读:
    GB/T 38635.1-2020 信息安全技术 SM9标识密码算法 第1部分:总则
    信息安全行业国家标准汇总,信息安全行业从业人员必看
    贪吃蛇游戏(printf输出C语言版本)
    C 实战练习题目57
    C 实战练习题目56
    C 实战练习题目55
    C 实战练习题目54
    C 实战练习题目53
    C 实战练习题目52
    C 实战练习题目51
  • 原文地址:https://www.cnblogs.com/Sky-Aces/p/11296457.html
Copyright © 2011-2022 走看看