java中的接口是类吗
345
2022-08-22
Java十分钟精通集合的使用与原理上篇
目录什么是集合?集合分为Collection和Map两种体系一、Collection接口:二、Map接口下分为HashMap和TreeMap:集合总结:Collections工具类:
什么是集合?
比如我们去买超市买很多东西,我们不可能拿一样就去收银台,我们可能是先放到购物车内,然后再统一处理,所以购物车相当于一个容器,可以装很多东西,在java中的集合也是相当于一个容器,可以装很多数据。
集合继承关系图:
但是这张图太复杂了,我们看一张简便的:
集合分为Collection和Map两种体系
一、Collection接口:
collection 接口有 3 种子类型集合: List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet等(常用的几类)
Queue这个接口平时不常用,这里就不进行介绍,主要介绍ArrayList和Set:
ArrayList:储存有序并且可以重复的对象
Set:储存无序并且不可以重复的对象
List分为ArrayList和LinkedList:
ArrayLis:底层是数组结构,储存有序并且可以重复的对象
LinkedList:底层是链表结构,储存有序并且可以重复的对象
Set下有HashSet这个实现类:
HashSet:存储不能重复的对象,如果重复了程序并不会出错,但是后面的内容会覆盖前面的重复的
二、Map接口下分为HashMap和TreeMap:
注意:Map类型的集合是以键值对的形式来储存(Key:Value),保持具有映射关系的数据,因此Map集合用来保存无序的 键值对形式的值。根据键key来获取到对应的值。学过python的同学肯定知道字典,没错,Map的格式就是和Python中的字典一致,比如:
{red=红色, green=绿色, yellow=黄色}
HashSet的特点:
无序HashSet是以Hash算法来记录再内存中无序存储的对象的,速度更快.HashSet不是线程同步的,非线程安全的.HashSet可以存储null
Map分为:
HashMapLinkedHashMapHashTableConcurrentHashMapEnumMapTreeMap
LinkedHashMap:
LinkedHashMap是以链表式存储的HashMap,并且是以Hash算法来获取hashcode的值来获取内存中的数 据,存储的顺序和读取的顺序一致。
HashTable:
HashMap和HashTable的作用一样,都是无序的键值对形式存储,HashTable考虑线程安全,HashMap不考 虑线程安全。 凡是线程安全的效率没有非线程安全的高。
ConcurrentHashMap:
也是和HashMap线程一样,但是它考虑线程安全。HashTable是采用给当前线程加锁实现线程安全, ConcurrentHashMap是采用分段锁机制来实现线程安全。
EnumMap:
专门用来存储枚举的Map集合
TreeMap:
TreetSet是SortSet接口的实现类,TreeSet可以保证元素处于排序状态再保存。它采用的是红黑树算法数 据结构来存储集合元素。TreeSet支持两种排序:
自然排序和定制排序默认采用自然排序(在集合第二章介绍)
注意:如果是存储大量的数据,我们一般是不会用Map去存储。Map一般用于存储小量并且可以无序的键值对存储的数据。比如登录页面的用户名、密码等等。
集合总结:
集合是用于存储对象并且可以无限扩容,可以以有序、无序、键值对形式来存储对象List接口下都是存储有序的可重复的元素集合,ArrayList是以数组形式存储,LinkedList以链表式存储凡是以LinkedXXX都是双向链表式存储的集合,都是有序并按插入的顺序存储凡是以HashXXX是以哈希算法存储,无序不可重复,获取速度快凡是TreeXXX都是以红黑树算法排序后再存储,分自然排序和定制排序集合中插入的值都是引用类型,它会将基本类型自动装箱成包装类型再存储到集合中
Collections工具类:
注意:不要和Collection搞错咯,这个是加了个s,是一个工具类,它包含有各种有关集合操作的静态多态方法。此类不能实例化,集合可以使用 Collections来对数据进行排序等等很多方法,具体可看官方文档:
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html
集合的文字内容比较多,类型也比较多,容易混淆,小应学长将在下一章对常见的集合类型进行代码演示。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~