Java中的集合(最全干货精美装)

tech2023-05-19  103

By CaesarChang                 合作: root121toor@gmail.com

~关注我  带你看更多精品知识

类集中最大的几个操作接口:Collection、Map、Iterator,这三个接口为以后要使用的最重点的接口。

------------------------为了更好的学习集合  ,先简单串一下数据结构-------------------------------

 链表:

 

二叉树:

二叉树是树的一种,每个节点最多可具有两个子树,即结点的度最大为 2(结点度:结点拥 有的子树数)。

完全二叉树

若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

二叉树的遍历方式

(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插 入和删除的一端称为栈顶,另一端称为栈底

特点:

1先进后出

2栈的入口出口都是栈的顶端位置

队列:

队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的 一端进行插入,而在另一端进行删除元素的线性表。队尾(rear)是允许插入的一端。队头(front)是 允许删除的一端。

数组:

数组是在内存中开辟一段连续的空间,

指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原 数组元素根据索引,复制到新数组对应索引的位置。

指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应 索引的位置,原数组中指定索引位置元素不复制到新数组中。

特点:

查找元素快 

增删元素慢

    --------------------------------------正片开始--------------------------------------------------

集合和数组既然都是容器,它们有啥区别呢

数组的长度是固定的。集合的长度是可变的

数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类 型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

Collection集合

Collection是所有单列集合的父接口,单列集合(List和Set)是Collection的子类,每次操作的时候都只能保存一个对象的数据

常用方法:

。 public boolean add(E e) : 把给定的对象添加到当前集合中

。 public void clear() :清空集合中所有的元素

。 public boolean remove(E e) : 把给定的对象在当前集合中删除

。 public boolean contains(E e) : 判断当前集合中是否包含给定的对象

。 public boolean isEmpty() : 判断当前集合是否为空

。 public int size() : 返回集合中元素的个数

。 public Object[] toArray() : 把集合中的元素,存储到数组中

List接口

继承了Collection的所有 ,又增加了一些特有

常用方法:

。public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上

。 public E get(int index) :返回集合中指定位置的元素

。 public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素

。 public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新 前的元素

其子类  ArrayList  Vector  LinkList

ArrayList 

线程不安全,有List 和Collection的所有方法,默认数组大小 10

Vector 

线程安全 ArrayList有的都会有   

ArrayList和Vector相同点与区别:

同:

1 ArrayList和Vector都是继承了相同的父类和实现了相同的接口 2 底层都是数组(Object[])实现的

3 初始默认长度都为10

区别:

1 同步性:

Vector中的public方法多数添加了synchronized关键字、以确保方法同步、也即是Vector线程安全、ArrayList线程不安全。

2 扩容:

ArrayList以1.5倍的方式在扩容、Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍

3性能:

在性能方便通常情况下ArrayList的性能更好、而Vector存在synchronized 的锁等待情况、需要等待释放锁这个过程、所以性能相对较差。

 4 输出:

ArrayList支持支持 Iterator、ListIterator 输出,Vector除了支持 Iterator、ListIterator外,还有Enumeration输出

 LinkedList(理解)

存储的结构是链表结构 List里面的方法多有   同时还有自己特有的

。public void addFirst(E e) :将指定元素插入此列表的开头

。 public void addLast(E e) :将指定元素添加到此列表的结尾

。 public E getFirst() :返回此列表的第一个元素

。 public E getLast() :返回此列表的最后一个元素

。 public E removeFirst() :移除并返回此列表的第一个元素

。 public E removeLast() :移除并返回此列表的最后一个元素

。 public E pop() :从此列表所表示的堆栈处弹出一个元素

。 public void push(E e) :将元素推入此列表所表示的堆栈

。 public boolean isEmpty() :如果列表不包含元素,则返回true。

Iterator接口

用来遍历Collcection集合下的所有集合 List Set啦...

public E next() :返回迭代的下一个元素 同时指针下移。

public E previous() :返回迭代的上一个元素 同时指针上移。

public boolean hasNext() :如果仍有元素可以迭代,则返回 true

增强for

for(数据类型  变量名  :  集合 或 数组名){}

Set接口

Set 接口也是 Collection 的子接口,与 List 接口最大的不同在于,Set 接口里面的内容是不允许重复的

无 get方法 

获取方法

1 iterator迭代

2toArray  进行遍历

HashSet

Set的子类, 也无get方法,也不允许重复,,散列存放(顺序不能保证)

获取方法

1 iterator迭代

2toArray  进行遍历

使用举例:

TreeSet和Comparable

有序(按照元素顺序,不是你输入的顺序 ), 此类iterator快递失败,

自定义类实现对象排序:

要比较的类实现Comparable接口

  Comparator比较器

将Comparator 传递给sort方法(如Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制

 

“只要是碰到了集合,则输出的时候想都不想就使用 Iterator 进行输出。”   

          --------------------------------单值存储结束了------------------------------

 

Map<K,V> 集合

Map集合存储的是一个个的键值对数据        key value    key不可重复

举例: 

HashMap

 使用对象数组加链表, 当哈希桶的使用超过%75,扩容桶为二倍                        

 

                 如果key相同,并且hashCode相同,那么value会被覆盖

                 如果key相同,但是hashcode不同,那么value不会被覆盖

Map集合及各子类区别分析:

TreeMap :  有序(自动排序))的Map集合

LinkedHashMap: 也是有序,又有hashMap快速查找的优点

请移步 javaIO点击我进入JavaIO

感觉写的不错的点个赞呗  谢谢了

CaesarChang张旭 认证博客专家 Spring Spring Boot Java 曾就职于苏宁,爱奇艺等公司,擅长java后端开发,拥有多年项目经验和教学经验;在多个大型企业级项目中担任过重要角色。教学风格严谨而又不失幽默,注重培养学员的自主学习和解决问题的能力,授课得到学员的高度认可。
最新回复(0)