zoukankan      html  css  js  c++  java
  • Java集合知识点小结

    Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes)。集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题。 
    1 Collection 和 Collections的区别。 
    2 List, Set, Map是否继承自Collection接口。 
    3 ArrayList和Vector的区别。 
    4 HashMap和Hashtable的区别。 

    篇尾有答案,我们开始正题。   

    集合Collection接口  

    --Collection 是任何对象组,元素各自独立,通常拥有相同的套用规则。Set List由它派生。

    基本操作  增加元素add(Object obj); addAll(Collection c);  

    删除元素 remove(Object obj); removeAll(Collection c); 

    求交集 retainAll(Collection c);  

    删除元素 remove(Object obj); removeAll(Collection c); 

    求交集 retainAll(Collection c);  

    访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)

    Public interface Iterator

        Public Boolean hasNext(}; 

        Public Object next(}; 

        Public void remove(}; 

    }  

    集set 
    --没有重复项目的集合  

    有三种特定类型的集可用 

    HashSet-基于散列表的集,加进散列表的元素要实现hashCode()方法  

    LinkedHashSet-对集迭代时,按增加顺序返回元素 

    TreeSet-基于(平衡)树的数据结构    

    清单List 

    --位置性集合。加进清单的元素可以加在清单中特定位置或加到末尾  

    有两个特定版本

    ArrayList(数组表)-类似于Vector,都用于缩放数组维护集合。区别:

    一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
    二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 

    LinkedList(链表)-是双向链表,每个节点都有两个指针指向上一节点和下一节点。 

    用在FIFO,用addList()加入元素 removeFirst()删除元素
    用在FILO,用addFirst()/removeLast()  

    ListIterator提供双向遍历next() previous(),可删除、替换、增加元素  

    映射表Map  

    --用于关键字/数值对,像个Dictionary  

    处理Map的三种集合  

    关键字集KeySet()  

    数值集value() 

    项目集enrySet()  

    四个具体版本

    HashMap-散列表的通用映射表 

    LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序  

    WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它 

    TreeMap-基于平衡树的映射表   

    HashMap-散列表的通用映射表  

    LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序  

    WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它 

    TreeMap-基于平衡树的映射表  
    Collections类,用于同步集合,还能改变集合只读方式的类 
    e.g.: 

    Map mp=new HashMap();

    mp=Collections.synchronizedMap(mp); //生成线程安全的映射表 

    mp=Collections.unmodifiableMap(mp); //生成只读映射表 

    Comparable 自然顺序的排序类 Comparator 面向树的集合排序类  

    容器分类学(Container taxonomy)  

    集合接口: Collection List Set;Map Iterator ListIterator。 

    抽象类: AbstractCollection AbstractList AbstractSet AbstractMap AbstractSequentiaList。

    老版本中的集合类型 

    Vector类  

    Vector,就是向量。一种异构的混合体,可以动态增加容量。对它的操作简要如下 

    比如我们有一个Vector: Vector myVec=new Vector(a_Array.length)  

    取得vector的长度:myVec.size(); 

    赋值:set(int position,Object obj) / setElementAt(Object obj, int position) –不支持动态增长  

          add(Object obj )/ addElement(Object obj) 在Vector末尾加入对象  

    e.g.:myVec.add(new a_Array[0]); 

    取出元素:get(int position) / getElement(int position) 

    Stack类 

    是Vector的子类。就是数据结构里讲滥了的堆栈(这个词可简称栈,不要混淆于heap-堆)。后进先出的存取方式。  

    Stack()构造空栈 

    Empty()叛空  

    Search()检查堆栈是否有元素 

    Peek()取得栈顶元素 

    Pop()弹栈 

    Push()入栈   

    Enumeration接口   

    Dictionary类  

    字典。关键字/数值方式存取数据,如果映射没有此关键字,取回null。 

    Hashtable类 

    是Dictionary结构的具体实现。   

    面试题答案  

    Collection 和 Collections的区别。  

    Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。  

    Collection是个java.util下的接口,它是各种集合结构的父接口

    List, Set, Map是否继承自Collection接口? List,Set是 Map不是  

    ArrayList和Vector的区别。 
    一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
    二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
      

    HashMap和Hashtable的区别  
    一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 

    二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 

    三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/geeek/p/4049191.html
Copyright © 2011-2022 走看看