码迷,mamicode.com
首页 > 其他好文 > 详细

list set map概要

时间:2017-09-08 00:21:49      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:双向链表   enum   检查   线程安全   bsp   treeset   元素   散列   val   

java.util.Collection集合接口,其中list,set继承collection,map没有继承接口

Iterator接口:遍历集合和map 
* (1)使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
* 注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
*
* (2) 使用next()获得序列中的下一个元素。
*
* (3) 使用hasNext()检查序列中是否还有元素。
*
* (4) 使用remove()将迭代器新返回的元素删除。 ListIterator只能迭代list,增加了add,set等方法

  

List:有序,可以重复,允许为空的列表 

  add():添加元素

  get():取出元素

  addAll(Object obj):添加集合对象中的所有元素

实现类:

    ArrayList:底层以数组为基本结构,所以查找元素很快,但插入,删除元素很慢

    LinkedList:底层以双向链表为基本结构,所以插入,删除元素很快,但查找元素很慢

set:无序,不可以重复,允许有一个null

  add():添加元素

  没有get()方法,不能取出单独的元素

  addAll(Object obj):添加集合对象中的所有元素

实现类:

    HashSet():add()底层利用了hashmap的put()方法,所以每次用hashcode与equal()方法判断值是否重复,如果重复则返回false

    底层代码:

        public boolean add(E e) {
          return map.put(e, PRESENT)==null;
        }

    TreeSet():因为set集合是无序的,所以在iterator迭代的时候,不能正元素的顺序,所以出现了TreeSet();可以默认排序,也可以通现java.util.Comparator<Type>接口来自定义排序方式。

      (set可以有序吗,利用treeSet()实现类)

    LinkHashSet():跟hashset很相似,继承了父类hashset,但是可以维护顺序

map:键值对形式,键不能为重复,值可以重复;hashmap允许键值为null,但hashtable不允许为键值为null(底层利用散列算法查找,所以在集合中查找元素最快)

  put():添加元素;

  get():取出元素;

  keyValue():取出所有的键;

  Value():取出所有的值;

 实现类:hashmap():hashmap可以接收空值,HashMap是非synchronized(同步)的,意味着是线程非安全的,多个线程不能共享hashmap

     hashtable():hashtable不能接收null值(键值都不为空),hashtable是同步的,意味着是线程安全的,多个线程能共享hashtable  

      另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。
      * 所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,
      * 但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,
      * 要看JVM。这条同样也是Enumeration和Iterator的区别。

 总结:由于hashtable是线程安全的,所以在单线程下它比hashmap慢,如果不需要同步,只是单一线程,那么使用hashmap性能要好些

 如何让hashmap同步:Map m = Collections.synchronizeMap(hashMap);

list set map概要

标签:双向链表   enum   检查   线程安全   bsp   treeset   元素   散列   val   

原文地址:http://www.cnblogs.com/ruerror/p/7492201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!