Java-集合入门,一篇就够了!

JAVA集合

一、为什么要学习集合?

灵魂发问:
已经学习了数组是用来存数据的,为什么还要学习集合?
回答:
Java是面向对象的语言,数组虽也能存储对象,但数组的长度固定,即使能扩容,也方式复杂。为了更简便的操作对象,Java就提供了集合。
但需要注意的是,虽然集合的长度可变,但是只能存储对象数据类型,即引用数据类型。

(前提知识)泛型

泛型可以保证一个集合的所有对象类型一致
若存储的元素不同,则编译不同
优点:

  1. 有利于集合遍历,将异常移至编译期

  2. 类型安全,通过知道使用泛型定义的变量的类型限制,编译器可以更有效地提高Java程序的类型安全;

  3. 消除强制类型转换,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。所有的强制转换都是自动和隐式的;

  4. 提高性能。

定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,这些通配符是规定的,不是一成不变的!
对于常见的泛型模式,一般规范:
K ——键,比如映射的键。
V ——值,比如 List 和 Set 的内容,或者 Map 中的值。
E ——异常类。
T ——泛型。

下列尖括号内就代表泛型

ArrayList<String> arrayString=new ArrayList<String>();

(前提知识)迭代器

迭代器(iterator)
java中提供了很多种集合,它们在存储元素时,采用的存储方式不同。所以当我们要取出这些集合中的元素时,可以通过一种通用的获取方式来完成。集合中把这种取元素的方式描述在Iterator接口中。迭代器是用来遍历集合的
重点掌握三个方法

  1. hasNext()
    判断集合中还有没有可以被取出的元素,如果有返回true
  2. next()
    取出集合中的下一个元素
  3. remove()
    删除元素
二、集合的介绍

集合是储存对象的一种容器,每种集合的数据结构不同,功能作用也不同。
Java的容器可分为两大类Collection和Map

下图是比较常见的集合类
在这里插入图片描述

Collection集合:

易搞混的点:
Collection集合要和Collections加了个s的分开
Collection:是接口
Collections:是工具类,提供方法

Collection主要又分为List,Set,Queue
List代表有序的,允许有重复元素的集合
Set代表无序的,不允许有重复元素的集合
Queue代表队列集合,这个放在数据结构单讲

List集合
ArrayList

插入、删除效率低下,查询效率高。元素可以重复,容量可以动态增加和减少,大小可变,初始容联为10。

LinkedList

LinkedList底层使用双向链表,所以增删快,查询慢,和ArrayList刚好相反,链表批量增加,是靠for循环遍历原数组,依次执行插入节点操作,元素可以为null。

Vector

Vector和ArrayList类似但线程安全,Stack 是Vector类的实现类,虽然线程安全,但效率和ArrayList相比较低

类名ArrayListLinkedListVector
底层实现数组链表数组
继承类AbstractListAbstractSequentialListAbstractList
线程安全线程不安全线程不安全线程安全

所以总的来说查询多用ArrayList,删减多用LinkedList

Set集合
HashSet

内部的数据结构是哈希表,无序,是线程不安全的。

TreeSet

内部的数据结构是二叉树,有序,是线程不安全的。

LinkedHashSet

底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。

类名HashSetTreeSetLinkedHashSet
底层实现哈希表红黑树链表和哈希表
线程安全线程不安全线程不安全线程不安全

存入Set的每个元素都必须是唯一的,Set不保存重复元素,并且Set接口不保证维护元素的次序。

Map集合:

Map代表具有映射关系的集合!Map里保存key和value,它们都可以使任何引用类型的数据,但key不能重复。
通过指定的key就可以取出对应的value!

HashMap

底层是用哈希表,允许null对象作为键和值,并且HashMap是不同步的,即HashMap线程不安全!

TreeMap

可以对集合中的键进行指定顺序的排序,默认是使用键的自然顺序,也可以使用比较器!

HashTable

HashTable的对象都可以作为键或值,另外,作为键的对象必须实现HashCode()和equals(),HashTable是同步的,即HashTable是线程安全的。

类名HashMapHashTableTreeMap
底层实现哈希表哈希表红黑树
继承类AbstratMapDictionaryAbstratMap
键是否能null不能
值是否能null不能
线程安全不安全安全不安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值