首先我们要了解什么是集合?

  正所谓容器,比如说杯子是装水的容器,衣柜是装衣服的容器,那么集合就是装数据的容器。

集合有什么特点呢?

  1.集合长度是可变的

   2.集合用来存储对象

集合和数组有什么区别呢?

  1.数组用可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型。

   2.数组长度一旦定义就不可变了,集合长度是可变的。

   3.数组只能存储同一种类型的数据,集合可以存储多种类型的对象。

常用的集合有哪些呢?

  集合分为两种Collection和Map

  Collection下面的接口有List和Set,Map的实现类有HashMap,Hashtable,TreeMap,LinkedHashMap,ConcurrentMap

  List接口的实现类有ArrayList和LinkedList和Vector

  Set接口的实现类有HashSet,LinkedHashSet,TreeSet

那么List,Set,Map之间有什么区别呢?

  List是有序的,可重复的

  Set是无序的,不可重复的

  Map存储的是键值对(key-value),key是无序的,不可重复的,value是无序的,可重复的

集合框架的底层数据结构分别是什么呢?

  ArrayList:Object类型的数组

  vector:Object类型的数组

  LinkedList:双向循环链表

  TreeSet:红黑树

  HashSet:基于HashMap实现的

  LinkedHashSet:基于LinkedHashMap实现的

  TreeMap:红黑树

  HashMap:在jdk8以前用数组+链表,jdk8以后也是数组+链表但是当链表长度大于8时,链表会转化成红黑树(这样的话查找效率会增加)

  LinkedHashMap:和HashMap相同,唯一添加的就是双向链表,这样使得它可以顺序存储,也可以进行顺序操作

  Hashtable:数组+链表

那些集合是线程安全的?

  1.vector

  2.堆栈类

  3.Hashtable(底层方法都加了synchronize)

如何确保集合不被修改?

  建立一个只读集合使用Collections.unmodifiableCollection(list)

什么是迭代器,如何使用

  Iterator:可以遍历任何Collection接口

   使用:

    List<String> list = new ArrayList<String>;

    Iterator<String> it = list.iterator(); 

    while(it.hasNext){

      String its = it.Next();

      System.out.println(its)

    }

如何边遍历边移出

    List<String> list = new ArrayList<String>;

    Iterator<String> it = list.iterator(); 

    while(it.hasNext){

     it.remove();

    }

Iterator和ListIterator有什么区别

  1.前者可以遍历List和Set,后者只能遍历List

  2.前者只能单向遍历,后者可以双向遍历

随后分别介绍各种集合

Collection接口

  1.List接口

    ArrayList的优缺点

        优点:底层数组实现,查找快

           顺序添加元素方便

        缺点:插入和删除元素时候,需要做一次复制操作,耗费性能

     如何实现数组和List之间的转换

        数组->List:  Arrays.asList(array)

        List->数组:  list.toArray()

最新文章

  1. Extjs4.0以上版本 Ext.Ajax.request请求的返回问题
  2. 让Laravel5支持memcache的方法
  3. HDU 5802 Windows 10 (贪心+dfs)
  4. Demon_打砖块(建造一面墙,发射子弹打砖块)
  5. Laravel 使用简述
  6. flask 扩展之 -- flask-moment
  7. 26.app后端怎么架设推送服务
  8. keepalived介绍及工作原理
  9. sys.exit(main(sys.argv[1:]))
  10. IdentityServer4【Introduction】之术语
  11. 抛开jQuery,拾起原生JS的DOM操作
  12. gitlab 搭建自己的源代码管理器
  13. C#大型电商项目优化(三)——扩展性与支付
  14. ERP采购业务(三十七)
  15. android设备兼容性
  16. Travelling Fee(Dijlstra——最短路问题变型)
  17. bzoj 1455 可并堆+并查集
  18. linux指定某用户某组挂载外接硬盘以便操作硬盘
  19. Category 特性在 iOS 组件化中的应用与管控
  20. 详解UML图之类图 (转)

热门文章

  1. 深度长文整理-Redis进阶
  2. B树【Balanced-Tree】
  3. java 并发线程池的理解和使用
  4. Guava Cache详解
  5. 深入理解HBase
  6. day59:Linux:编辑工具vim&amp;文件类型&amp;文件属性
  7. Spring学习(六)--Spring的IOC
  8. Unicode、UTF8、GB2312、ANSI
  9. 满屏的try-catch,不瘆得慌?
  10. Java安全之Commons Collections1分析(二)