JavaSE:Java基础4:集合

集合:可以看做一个容器,用来存储java类的对象。

使用场景:为了保存数目不确定的对象,JDK中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变。

Java中的集合位于java.util包中。

集合按照存储结构可以分为两大类:单列集合(Collection)和双列集合(Map)。

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set。

List的特点是元素有序,元素可重复。Set的特点是元素无序且不可重复。

List接口的主要实现类有ArrayList和LinkedList,Set接口的主要实现类有HashSet和TreeSet。

Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,在使用Map集合时可以通过制定的Key找到对应的Value。Map接口的主要实现类有HashMap和TreeMap。

集合体系架构图

Collection接口的方法

List集合常用方法

 

 

 

ArrayList集合的底层使用一个数组来保存元素 ,在添加或删除制定元素位置时,会导致创建新的数组,效率比较低。,因此不太适合做大量的增删操作。这种数组允许程序通过索引的方式来访问元素,因此使用ArrayList集合查找元素很方便。

LinkedList集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,这样可以将所有的元素连接起来。当插入一个新的元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。因为这样的存储结构,所以LinkedList集合对于元素的增删操作具有很高的效率。

LinkedList集合常用方法

 

Iterator接口:在程序开发中,经常需要遍历集合中的元素。 Iterator接口主要用于迭代访问(遍历)Collection中的元素,因此Iterator对象也被称为迭代器。需要特别说明的是,当通过迭代器获取ArrayList集合中的元素时,都会将这些元素当成Object类型来看待,如果想得到特定类型的元素,则需要强制类型转换。

foreach循环:一种简洁的for循环,也称增强for循环。foreach循环用于遍历数组或集合中的元素。

语法格式如下:

for(容器中的元素类型 临时变量:容器变量){

         执行语句

}

与for循环相比,foreach循环不需要获得容器的长度,也不需要根据索引访问容器中的元素,但它会自动遍历容器中的每个元素。使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。

与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。

Set接口主要有两个实现类,分别是HashSet和TreeSet。其中,HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。TreeSet则是以二叉树的方式来存储元素,它可以实现对集合中的元素进行排序。

HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向HashSet集合中添加一个对象时,首先会调用该对象的hashCode()方法来确定元素的存储位置,然后再调用对象的equals()方法来确保该位置没有重复元素。

TreeSet是Set接口的另一个实现类,内部采用自平衡的排序二叉树来存储元素,这样的结构可以保证TreeSet集合中没有重复的元素,并且可以对元素进行排序。

自平衡的排序二叉树的特点:存储的元素会按照大小排序,并能去除重复元素。

二叉树:每个节点最多有两个子节点的有序树,每个节点及其子节点组成的树称为子树,通常左侧的子节点称为左子树,右侧的子节点称为右子树。

集合中的元素在进行比较时,都会调用CompareTo()方法,该方法是Comparable接口中定义的,因此要想对集合中的元素进行排序,就必须实现Comparable接口。JDK中大部分类都实现了Comparable接口,拥有接口中的CompareTo()方法。

有时候定义的类没有实现Comparable接口或者实现了Comparable接口而不想按照定义的CompareTo()方法进行排序,可以自定义比较器的方式来对TreeSet集合中的元素排序,实现Comparator接口,重写接口中的compare(Oject obj1,Object  obj2)方法。

 

 

Map接口

在现实生活中,,每个人都有唯一的身份证号,通过身份证号可以查询到这个的信息,这两者是一对一的关系。

在程序中,如果想存储这种具有对应关系的数据,则需要使用JDK提供的Map接口。Mao接口是一种双列集合,它的每个元素都包含一个键对象Key和一个值对象Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要制定了Key,就能找到对应的Value。

Map集合常用方法

 

HashMap集合是Map接口的一个实现类,它用于存储键值映射关系,但必须保证不出现重复的键。

Map中的键必须是唯一的,不能重复,如果存储了相同的键,后存储的值会覆盖原有的值。 

TreeMap集合是Map接口的另一个实现类,以红黑树实现,红黑树又叫自平衡二叉树。TreeMap中所有的键是按照某种顺序排列的。

Map接口中还有一个实现类HashTable,它和HashMap十分类似,区别在于HashTable是线程安全的。HashTable存取元素时速度很慢,目前基本上被HashMap类所取代,但HashTable类有个子类Properties在实际应用中非常重要,Properties主要用来存储字符串类型的键和值。实际开发中,经常使用Properties集合来存取应用的配置项。

队列以及更深度的集合手册,可以看看这个博客https://blog.csdn.net/a724888/article/details/80215706

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值