zoukankan      html  css  js  c++  java
  • 集合相关知识

    一、数组Array和集合的区别:

     
    (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)
     
    (2)JAVA集合可以存储和操作数目不固定的一组数据。 (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
     
    联系:使用相应的toArray()和Arrays.asList()方法可以回想转换。
     
    二、collection相关函数
     boolean add(E e) 
              确保此 collection 包含指定的元素(可选操作)。
     boolean addAll(Collection<? extends E> c) 
              将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
     void clear() 
              移除此 collection 中的所有元素(可选操作)。
     boolean contains(Object o) 
              如果此 collection 包含指定的元素,则返回 true
     boolean containsAll(Collection<?> c) 
              如果此 collection 包含指定 collection 中的所有元素,则返回 true
     boolean equals(Object o) 
              比较此 collection 与指定对象是否相等。
     int hashCode() 
              返回此 collection 的哈希码值。
     boolean isEmpty() 
              如果此 collection 不包含元素,则返回 true
     Iterator<E> iterator() 
              返回在此 collection 的元素上进行迭代的迭代器。
     boolean remove(Object o) 
              从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
     boolean removeAll(Collection<?> c) 
              移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
     boolean retainAll(Collection<?> c) 
              仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
     int size() 
              返回此 collection 中的元素数。
     Object[] toArray() 
              返回包含此 collection 中所有元素的数组。
    <T> T[]
    toArray(T[] a) 
              返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
     
    三、List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
     
    Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。
     
    List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的
     
    Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 
     
                                                     通用的目的实现
     
    接口      实现
       哈希表    可变数组    树        链表     哈希表+链表
    Set HashSet   TreeSet   LinkedHashSet
    List   ArrayList   LinkedList  
    Map HashMap   TreeMap   LinkedHashMap
    四.List和ArrayList  Map与HashMap的区别
     
      1.List是接口,List特性就是有序,会确保以一定的顺序保存元素.
     
      ArrayList是它的实现类,是一个用数组实现的List.
     
      Map是接口,Map特性就是根据一个对象查找对象.
     
      HashMap是它的实现类,HashMap用hash表实现的Map,就是利用对象的hashcode(hashcode()是Object的方法)进行快速散列查找.(关于散列查找,可以参看<<数据结构>>)
     
      2.一般情况下,如果没有必要,推荐代码只同List,Map接口打交道.
     
      比如:List list = new ArrayList();
     
      这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要:
     
      List list = new LinkedList();//LinkedList也是List的实现类,也是ArrayList的兄弟类
     
      这样,就不需要修改其它代码,这就是接口编程的优雅之处.
     
      另外的例子就是,在类的方法中,如下声明:
     
      private void doMyAction(List list){}
     
      这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.
     
      3.如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.
     
    五、List和Set的区别
    1、List中元素有序可重复,Set中元素无需不可重复,重复添加只会保存第一次添加的元素。
    2、List中常用方法中有set(int index,E element),set(int index)和get(int index) ,get(int index,E element)方法能灵活添加获取元素,而Set中没有这些方法(无序)。而且其中的Remove方法各不相同List中Remove(int index) ,Set中Remove(Object element)
    3.List有三种遍历方式 (1)foreach遍历 (2)Iterator迭代器遍历 (3)通过size()和get()两种方法配合的一般遍历
    复制代码
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class javaTest2 implements javaTest1 {
    
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add(1);
        list.add(5);
        list.add('a');
        
        for (Object object : list) {
            System.out.print(object+"  ");
        }
        System.out.println();
        
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+"  ");
        }
        System.out.println();
        
        Iterator it=list.iterator();
        while(it.hasNext()){
            System.out.print(it.next()+"  ");
        }
      }
    }
    复制代码

    运行结果:

    1  5  a  
    1  5  a  
    1  5  a  

    Set只有两种遍历方式 (1)foreach遍历 (2)Iterator迭代器遍历 

    复制代码
    Set set=new HashSet();
        set.add(1);
        set.add(3);
        set.add('b');
        
        for (Object object : set) {
            System.out.print(object+" ");
        }
        System.out.println();
        
        Iterator its=set.iterator();
        while(its.hasNext()){
            System.out.print(its.next()+" ");
        }
    复制代码

    运行结果:

    1 b 3 
    1 b 3 

    六、集合具体实现化类的区别

    1、Set实现:HashSet、TreeSet和LinkedSet区别

    HashSet将其元素储存在一个哈希表中,它具有最好的性能实现,然而它不保证迭代的顺序;TreeSet将其元素存储在一个红黑树追踪,按元素的值顺序排列,它本质上比HashSet要慢;LinkedHashSet是作为哈希表实现的,用链表链接这些元素,按元素的插入顺序排列

    2、List实现 ArrayList和LinkedList

    一般大家都知道ArrayList和LinkedList的大致区别:
    (1).ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    (2).对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    (3).对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

    3、Map实现: HashMap、TreeMap和LinkedMap区别

    他们的行为和执行性能和Set中的实现HashSet、TreeSet和LinkedSet类似。另外Hashtable(哈希表)重新实现了Map

  • 相关阅读:
    Mongoose 校验参数
    meta大全
    go并发之WaitGroup
    用Tasker实现收到Android手机短信自动转发到微信
    不用双卡iPhone,仅需五步,老iOS手机自动给你转发短信
    怎样选择莫代尔秋衣裤
    关于ROS的dst-nat和src-nat的理解,和公司的一个案例以及解决方案
    关于ADSL拨号多拨跟运营商AC服务器之间的关系和一些技巧,群里大神给的经验
    查询网站的dns,get,劫持检测等等
    zabbix自定义key类型之计算(Calculated items) 在流量曲线图里,把各个item的值叠加的方法
  • 原文地址:https://www.cnblogs.com/yulei126/p/6756714.html
Copyright © 2011-2022 走看看