zoukankan      html  css  js  c++  java
  • JAVA常用知识点总结---集合篇

    一、Collection 与 Collections的区别:
    1. Collections:
    java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。


    2. Collection:
    Collection是最基本集合接口,它定义了一组允许重复的对象,提供了对集合对象进行基本操作的通用接口方法,其意义是为各种具体的集合提供了最大化的统一操作方式。


    二、Collection 基础:
    1. Collection接口派生了两个子接口Set和List,分别定义了两种不同的存储方式,如下:

    (1)List  是实现了List接口的集合类,有序且可以重复,两个重要的实现类 ArrayList和LinkedList,特性如下:
            ArrayList: 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
            LinkedList:底层是使用了双向链表数据结构实现的, 特点: 查询速度慢,增删快。 
       Vector(不常用):  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

    (2)Set 是实现了Set接口的集合类,无序且不可重复。两个重要的实现类HashSet和TreeSet
      HashSet:  底层是使用了哈希表来支持的,特点: 存取速度快. 
      TreeSet:   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。


    2. Collection接口中的方法:

    (1) 增加
      add(E e)  添加成功返回true,添加 失败返回false.
      addAll(Collection c)  把一个集合 的元素添加到另外一个集合中去。

    (2) 删除
      clear() 
      remove(Object o) 
      removeAll(Collection  c) 
      retainAll(Collection  c) 

    (3) 查看
      size()

    (4)  判断
      isEmpty() 
      contains(Object o) 
      containsAll(Collection<?> c) 

    (5) 迭代
      toArray() 
      iterator() 

    3. Map&Iterator接口及Comparable接口
    1) Map接口:
    该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。
            特征:它描述了从不重复的键到值的映射。两个重要的实现类:HashMap和TreeMap
            HashMap:基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。
            TreeMap:基于红黑树实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。

    2) Iterator接口:
      集合访问器,用于循环访问集合中的对象。所有实现了Collection接口的容器类都有iterator方法,用于返回一个实现了Iterator接口的对象。
    Iterator对象称作迭代器,Iterator接口方法能以迭代方式逐个访问集合中各个元素,并可以从Collection中除去适当的元素。

    3) Comparable接口:
      可以用于比较的实现,实现了Comparable接口的类可以通过实现comparaTo方法从而确定该类对象的排序方式。

    4) Map常用的遍历方式:

    Map<Integer, String> map1 = new HashMap<Integer, String>();
    map1.put(1, "one");
    map1.put(2, "two");
    map1.put(3, "three");
    
    for(Map.Entry entry: map1.entrySet()){
         System.out.println("key="+entry.getKey()+", value="+entry.getValue());
    }
    
    Iterator<Map.Entry<Integer, String>> it = map1.entrySet().iterator();
    while (it.hasNext()){
         Map.Entry<Integer, String> entry = it.next();
         System.out.println("key="+entry.getKey()+", value="+entry.getValue());
    }
    

      

    三、HashMap和Hashtable的区别
    1. HashTable:
      线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。
    Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好,单线程环境下它比HashMap要慢。

    2. HashMap:
      非synchronized,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行。
      HashMap不能保证随着时间的推移Map中的元素次序是不变的。
      另外,HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。

    四、 其他 

    (1)poll()方法和remove()方法的区别?

       poll()在获取元素失败时会返回空,remove()失败的时候会抛出异常。

    (2)用哪两种方式来实现集合的排序?

      可以使用有序集合如TreeSet或者TreeMap,也可以使用有顺序的集合如list,然后通过Collections.sort()来排序。

    (3)ArrayList和HashMap的默认大小是多少?

      JAVA 7中, ArrayList默认是10个元素,HashMap默认是16个元素(必须是2的幂)

    (4)Comparator与Comparable的区别?

      Comparator通常用于定义用户定制的顺序,Comparable常用于定义对象的自然顺序,Comparable总是只有一个,但可以有多个Comparator来定义对象的顺序。

    (5)32位和64位JVM最大堆内存分别是多少?

       32位JVM堆内存可达到2^32=4G, 但实际上会比这个小得多,不同操作系统之间不同,如windows大约1.5G,

       64位JVM堆内存可达到2^64,  实际上可以指定堆内存的大小。

    (6)编写多线程程序时会遵循哪些最佳实践?

      1)给线程命名,这样易于调试;

      2)最小化同步范围,只对关键部分同步,而不是将整个方法同步;

      3)如果可以,更偏向于volatile而不是synchronized;

      4) 使用更高层次的并发工具,而不是wait()和notify()来实现线程间通信,如BlockingQueue,CountDownLatch及Semeaphore;

      5) 优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。

  • 相关阅读:
    计算机硬件
    队列、堆、栈、堆栈的区别
    操作系统与应用程序的关系
    DNS与HTTPDNS
    配置静态路由传送网络包
    django的nginx配置
    视频流和文件传输相关协议
    HTTPS 对称加密和非对称加密
    HTTP1.1/2.0与QUIC协议
    mysql join联表 + id自增
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/7593555.html
Copyright © 2011-2022 走看看