• java之集合容器(Collection,Map)


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

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

    集合有什么特点呢?

      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()

  • 相关阅读:
    POJ 3304 计算几何 直线与线段相交
    POJ 2653 计算几何 判断线段相交
    POJ 1066 计算几何 线段相交
    关于git的一些有用的链接
    Cloudera是个什么东西
    Data Structure for phone book
    向大家推荐一个C/C++通用Makefile
    关于gcc/g++的include路径和其他一些路径问题
    volatile 和 sig_atomic_t
    分布式文件系统虚拟目录及命名空间的实现方法
  • 原文地址:https://www.cnblogs.com/ITYW/p/13417139.html
Copyright © 2020-2023  润新知