zoukankan      html  css  js  c++  java
  • 浅谈Java集合框架

    集合框架最大的作用就是维护一组类型同样的对象。

    仅仅是不同的类有不同的行为和性能。通常关注下面这些行为:

    • 是否能存放反复的元素
    • 遍历的顺序是如何的
    • 是否支持多线程

    以下首先介绍集合的经常使用,随后依据每种行为分别进行讨论。

    经常使用操作

    经常使用的操作一般就是添加删除查询。经常使用的添加操作有add、addAll,经常使用的删除操作有remove、removeAll。经常使用的读取操作有contains、get、indexOf,还能够通过迭代器进行遍历。说这些比較抽象,以下就用代码举个样例吧。


    import java.util.LinkedList;
    
    
    public class Main {
        public static void main(){
            LinkedList<Integer> list = new LinkedList<Integer>();
            
            // 添加三个元素
            list.add(1);
            list.add(2);
            list.add(3);
            
            // 删除一个元素
            list.remove(2);
            
            // 输出list中全部的元素
            for(int e:list) {
                System.out.println(e);
            }
        }
    }

    这个程序最后输出的结果例如以下:

    1
    3

    以上就是集合框架最简单的样例。尽管简单,可是平时编码的时候常常会用到。

    反复值

    除了Set和Map。其余的类都支持反复元素。

    对于Map。针对的是它的Key,也就是说它的Key不能反复,而Value随便怎样取值对能够,就不在讨论范围了。


    遍历的顺序

    遍历的顺序是各种集合之间最大的差别。

    遍历的顺序一般有三种:依照插入顺序进行遍历、依照compareTo结果进行遍历、无序遍历。


    依照插入顺序进行遍历的类有List、Vector、Stack、Queue、Deque、LinkedHashMap。当中Stack的遍历顺序和插入的顺序是相反的。Deque是Stack和Queue合体。两种顺序都支持,并且性能更快。




    依照compareTo结果进行遍历的类有SortedMap、TreeMap、SortedSet、PriorityQueue。




    无序遍历的类有:HashMap、Set、Hashtable。


    多线程

    仅仅有早期版本号的集合类支持多线程,后来发现多线程不关集合框架的事,后来出现的类就都不支持多线程了。




    所以。在Java的集合框架中,支持多线程的类仅仅有三个:Stack、Vector、Hashtable,这些都是早期的类,接口设计不良,性能一般,所以在新的project中一般不再使用。


    除了这三个类。其它的类都不支持多线程。

    假设确实须要用到多线程。能够调用path{Collections.synchronizedMap}或者path {Collections.synchronizedSet}让对象支持对线程。




    算法细节

    不同的类採用了不同的算法,整体上使用了链表、数组、哈希表、红黑树、堆这几种算法。以下都是我阅读了OpenJDK的源代码之后总结出来的。


    使用链表进行实现的类有:LinkedList、HashMap、Hashtable。


    使用数组实现的类有:ArrayList、Deque、Stack、Vector。


    使用哈希表进行实现的类有:HashMap、HashSet、Hashtable、LinkedHashMap、LinkedHashSet、WeakHashMap。


    使用红黑树实现的类有:TreeMap。




    使用堆实现的类有:PriorityQueue。

  • 相关阅读:
    Linux下 find 命令用法
    MVC3 ViewBage 输出的值 被编码
    C#枚举数值与名称的转换实例分享
    关于Js的那些面试题
    Javascript Event事件中IE与标准DOM的区别
    原生js选项卡
    js之事件冒泡和事件捕获详细介绍
    js事件的三个阶段
    js对象中关于this关键字的作用
    css的相对定位与绝对定位
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7025746.html
Copyright © 2011-2022 走看看