今天开始写我的第一篇JAVA基础,因为我是从PHP转行过来的,所以一些基础我还是需要认真复习,现在开始慢慢复习之前学习的基础内容,大家也可以一起看看复习复习,认真复习保证我们之后面试不至于在基础上面翻跟头。
集合 今天是我们要复习的知识点。
首先我们想到是,为什么要有集合?说到集合,我们首先想到是数组,因为JAVA提供的很多集合的底层都是通过数组进行实现的,但是数组一旦实例化他的长度是固定的,所以在扩展起来很是麻烦,而且数组里面可可以存储重复的,而且数组是一个线性表的存储方式,虽然这种方式在查询上带来很大的快捷性,但是在增上改查上就比较麻烦了,在这里就需要集合的出现了,集合能为我们在很多方面带来很大便利性。
集合分为Collection 和 Map 两种格式。
我们先来这里介绍Collection
Collection是java顶级集合类的顶级接口之一。
如图Collecton接口有三种子类型集合:List.set.和Queue。
我们这里先介绍关于Collection的一些方法。
这些方法也在下面的子类中适用。
紧接着我们要说的是List 。List的底层是通过数组来实现的,所以List是有序的,可重复的容器,每一个元素都有对应的索引值,有序从而能够精确控制这些元素,然后还可重复相对上面父类的Collection的方法之外List还有自己的方法。
List下面还分别有 ArrayList,LinkedList ,Vector。下面介绍一下。
ArrayList底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。我们一般使用它。
LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。
Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”。
那么我们就总结到,在实际开发环境中应该这样才能更好的让代码更符合业务需求。
需要线程安全时,用Vector。. 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)。不存在线程安全问题时,增加或删除元素较多用LinkedList。
然后我们下面介绍的是Set。首先Set的容器的特点就是无序,不可重复。
相比之前的Collection Set没有新增任何新的方法。我们在前面学习的List方法也在Set中适用。
HashSet在一些字符串重复之类的算法中有时候能够替我我们来省去很多事情。
接着我们来介绍Map
Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。就跟我们之前的对象一样,对象的属性就是键,属性的值可以重复,但是属性的名称不可以重复。
Map 接口的实现类有HashMap、TreeMap、HashTable、Properties等。
这些是Map经常用到的函数
HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于我们以后理解很多技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样),因此,非常有必要让大家理解。
数据结构中由数组和链表来实现对数据的存储,他们各有特点。
(1) 数组:占用空间连续。 寻址容易,查询速度快。但是,增加和删除效率非常低。
(2) 链表:占用空间不连续。 寻址困难,查询速度慢。但是,增加和删除效率非常高。
那么,我们能不能结合数组和链表的优点(即查询快,增删效率也高)呢? 答案就是“哈希表”。 哈希表的本质就是“数组+链表”。
HashMap与HashTable的区别:
HashTable类和HashMap用法几乎一样,底层实现几乎一样,只不过HashTable的方法添加了synchronized关键字确保线程同步检查,效率较低。
所以在考虑线程安全的时候用HashTable其余清空我们都用HashMap因为效率高嘛。
TreeMap是红黑二叉树的典型实现。红黑树我们在这里就不做介绍了,下章我们会拿出来进行一个详细的介绍,红黑树是一个有序的所以他和HashMap的主要区别在于
TreeMap和HashMap实现了同样的接口Map,因此,用法对于调用者来说没有区别。HashMap效率高于TreeMap;在需要排序的Map时才选用TreeMap。