java集合的小小总结

集合框架的内容太多太复杂,一旦不用就很容易忘记,于是我打算记录下来一些我的学习过程,在多多看API开发文档来提高自己的能力 。个人的理解或者哪里错了,希望各位大哥可以指出来,大家一起学习

每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分特点如下:

  (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。

  (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。

  (3)通过使用JDK附带的集合类,可以降低代码维护成本。

  (4)复用性和可操作性!

       (5)用来存储对象,如果对象的个数不确定

       (6)集合的长度是可变的,很灵活

       (7)集合是依赖对象而生的,所以就对基本数据类型"不感兴趣",所以集合中不可以存储基本数据类型值(但是实际是可以放的,存在自动拆箱和装箱功能)

                                    

  List<Integer> list = new ArrayList<Integer>();
                                        list.add(1);
                                       //打印结果为1
                                    System.out.println(list.get(0));


   

------------------------------------------------------------------------------------------------------------------------------------

                                         集合的一些好用的小技巧

需要数据唯一吗?

需要:set()

                 需要制定顺序吗:

                                                 需要:treeSet

                                                 不需要:HashSet

                                                 但是想要一个和存储一致的顺序:LinkedHashSet

不需要:List()(有序)

              需要频繁增删吗?

             需要:LinkedList

            不需要:ArrayList

ps:有序指的是插入的顺序

------------------------------------------------------------------------------------------------------------------------------------

如何记录每一个容器的结构和所属体系呢?

看名字!


List
    |--ArrayList
    |--LinkedList

Set
    |--HashSet
    |--TreeSet

后缀名就是该集合所属的体系

前缀名就是该集合的数据结构

看到   array(ArrayList,):就要想到数组,就要想到查询快,有角标

看到    Link(   LinkedList  ,  LinkedHashSet  ,  LinkedHashMap   )  :   就要想到链表,就要想到增删快,就要想到

                            增:add()  ; 

                            返回index位置的元素 :get(int index)  ;

                             移除第一个或者最后一个元素  :  remove+frist last();
看到hash(   HashSet   ,    HashMap   ): 就要想到哈希表,就要想到唯一性,就要想到覆盖hashcode()方法和equals()方法

              ps:覆盖它们的好处是利于查找,减少循环次数,提高效率,这两者的关系为:equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,有可能hashcode()不相等,也有可能相等。hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。详细可以看这里:http://www.360doc.com/content/14/0527/09/15113968_381327452.shtml


看到 tree (  treeSet  , TreeMap )  :   就要想到二叉树,就要想到排序,就要想到实现两个接口Comparable,Comparator

       ps:TreeSet是依靠TreeMap来实现的。TreeSet是一个有序的set。它实现了Comparable.用于比较排序。。详细可以看连接 :http://blog.csdn.net/dreamwbt/article/details/53185592            http://www.cnblogs.com/ningvsban/archive/2013/05/06/3062535.html


========================================================================

Map:一次添加一对元素。Collection 一次添加一个元素。
    Map也称为双列集合,Collection集合称为单列集合。
    其实map集合中存储的就是键值对。
    map集合中必须保证键的唯一性。

常用方法:
1,添加。
    value put(key,value):返回前一个和key关联的值,如果没有返回null.

2,删除。
    void  clear():清空map集合。
    value remove(key):根据指定的key翻出这个键值对。

3,判断。
    boolean containsKey(key):
    boolean containsValue(value):
    boolean isEmpty();

4,获取。
    value get(key):通过键获取值,如果没有该键返回null。
                    当然可以通过返回null,来判断是否包含指定键。
    int size(): 获取键值对的个数。
   


Map常用的子类:
    |--Hashtable :内部结构是哈希表,是同步的。不允许null作为键,null作为值。
        |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。         
    |--HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。
    |--TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。

ps:

    同步设计到线程的问题,列入a线程调用Hashtable的size方法(还没调用完)

    这时B线程也来调用size方法的话,就要排队等候,因为a正在调用

    如果是非同步的话,a,b可以在同一时间对Hashtable的一个方法










猜你喜欢

转载自blog.csdn.net/qq_20073741/article/details/53334522