集合中的各类接口

集合框架结构层次图
在这里插入图片描述
集合(collection)
是个管理一组对象的单一对象。在集合内的对象称之为元素(elements)。通常,集合可以处理很多种类型的对象,这些类型的对象都属于一个特定的类型(也就是说,它们具有共同的父类型)。
.集合API包含了如下将对象组为一体的接口:
Collection-- - -组称之为元素的对象;其实现决定了是否有特定的顺序和是否允许有重复元素。
●List
有顺序的集合;可允许元素重复
●Set
没有顺序的集合;不允许元素重复
Map
具有映射关系的集合
List代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引
List允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List默认按元素的添加顺序设置元素的索引。
LinkedList
1.LinkedList类也是List接口的实现类, 它的实现是一个双向列表列表中的每个节点都包含了对前一个和后一个元素的引用(头尾相接)
2.java.til.Queue队列(Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。)
3.队列也可以存放一组元素,但是存取元素必须遵循:先进先出原则(内存中排队)
4.LinkedList也实现了队列接口因为它可以保存一组元素,并且首尾增删快
,正好符合队列的特点

LinkedList的构造函数如下
在这里插入图片描述
ArrayList与LinkList的区别:
在这里插入图片描述
Vector:
ArrayList和Vector是List接口的两个典型实现
区别:
1.是一个古老的集合,通常建议使用ArrayList
2… ArrayList是线程不安全的,而Vector是线程安全的。即使为保证List集合线程安全,也不推荐使用Vector
Set接口
1.Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。
2.Set判断两个对象是否相同不是使用==运算符,而是根据equals方法
HashSet:
1.HashSet是Set接口的典型实现,大多数时候使用Set集合时都使用这个实现类。
2.,HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
3.HashSet具有以下特点:
(1)不能保证元素的排列顺序
(2)HashSet不是线程安全的
(3)集合元素可以使null
4.当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值(hashCode()方法给对象返回一个hash code值)决定该对象在HashSet中的存储位置。
5.如果两个元素的equals()方法返回true,但它们的hashCode()返回值不相等,hashSet将会把它们存储在不同的位置,但依然可以添加成功。
HashCode方法
1.HashSet集合判断两个元素相等的标准:两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。
2.如果两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同。
3.重写hashCode()方法的基本原则:
(1)在程序运行时,同一个对象多次调用hashCode()方法应该返回相同的值
(2)当两个对象的equals()方法比较返回true时, 这两个对象的hashCode()方法的返回值也应相等
(3)对象中用作equals()方法比较的Field(类的属性信息),都应该用来计算hashCode值
在这里插入图片描述
LinkedHashSet:
1.LinkedHashSet是HashSet的子类
2.LinkedHashSet集合根据元素的hashCode值来决定元素的存储位置,LinkedHashSet是HashSet的子类但它同时使用链表维护元素的次
序;这使得元素看起来是以插入顺序保存的。
3.LinkedHashSet性能插入性能略低于HashSet ,但.在迭代访问Set里的全部元素时有很好的性能。’
LinkedHashSet不允许集合元素重复。
Iterator接口
1.Iterator 接口主要用于遍历Collection集合中的元素, Iterator 对象也被称为迭代器
2.Iterator接口隐藏了各种Collection实现类的底层细节,向应用程序提供了遍历Collection集合元素的统一编程接口
3.Iterator仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。
在这里插入图片描述
在这里插入图片描述
lterator 和ListIterator的区别是什么?
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
Foreach遍历循环:
在这里插入图片描述
TreeSet:
在这里插入图片描述
自然排序
因为只有相同类的两个实例才会比较大小,所以向TreeSet中添加的应该是同一个类的对象。
当需要把一一个对象放入TreeSet中,重写该对象对应的equals()方法时,应保证该方法与compareTo(Object obj)方法有一致的结果:如果两个对象通过equals()方法比较返回true,则通过compare To(Object obi)方法比较应返回0
参与排序的对象需实现comparable接口,重写其compareTo()方法,方法体中实现对象的比较大小规则。
实体类实现Comparable接口,可以去重写compareTo()方法,解决实际排序问题。,示例如下:
在这里插入图片描述
定制排序:定制排序,即是自己写一个比较器.
1.在定义set的时候,后面的()里面要 创建构造器对象
TreeSet set = new TreeSet<>(new MyComparator());
2.自定义的MyComparator类要实现 Comparator接口.里面用到的person类和book类就是用的是<Treeset之自然排序>中的person和book类, 还要重写 compare方法,传进来两个Person对象.自然排序看懂之后,定制排序就很简单.
无非就是在定义set的时候创建一个构造器作为参数.自定义构造类实现Comparator接口.重写compare方法.
3.重写compare方法的时候,方法的两个参数前面的代表this对象,则是要添加到set集合的对象,第二个参数是代表接口的对象.
在这里插入图片描述
总结:
自然排序实现的是comparable接口。其在类可以修改时使用。
定制排序实现的是comparator接口。其在类不可以修改时使用
在使用定制排序或是自然排序时,在其用到的类中都要重写hashCode()与equals()方法
操作集合的工具类Collections
Collections是一个操作Set、List 和Map等集合的工具类。Collections中提供了大量方法对集合元素进行排序、查询和修改等操作, 还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
排序操作:
1.reverse(List):反转List中元素的顺序
2.shuffle(List) :对List集合元素进行随机排序
3.sort(List) :根据元素的自然顺序对指定List集合元素按升序排序
4.sort(List , Comparator) :根据指定的Comparator产生的顺序对List集合元素进行排序
5.swap(List , int,int) :将指定list集合中的i处元素和j处元素进行交换
6.Object max(Collection) :根据元素的自然顺序,返回给定集合中的最大元素
7.Object max(Collection , Comparator) :根据Comparator指定的顺序,返回给定集合中的最大元素的出现次数
8.boolean replaceAl(Lit list,Object oldVal , ObjectnewVal):使用新值替换List对象的所有旧值
集合类实现线程同步
在这里插入图片描述
Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种

  1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
  2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
  3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
  4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
    Map接口
    1.Map内存储的是键/值对这样以成对的对象组(可以把–组对象当成一个元素), 通过“键”对象来查询“值”对象
    2.Map是不同于Collection的另外一种集合接口
    3.Map中,key值 是唯一的(不能重复),而key对象是与value对象关联在一起的
    4.Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的Key,另外一组用于保存Map里的Value
    5.Map中的key和value都可以是任何引用类型的数据
    6.Map中的Key不允许重复,即同一个Map对象的任何两个Key通过equals方法比较中返回false
    7.Key和Value之间存在单向一对一关系,即通过指定的Key总能找到唯一的,确定的Value。
    Map接口有两个实现
    1.HashMap - key/va lue对:是按照Hash算法存储的
    2.TreeMap - key/va lue对:是排序(按key排序)存储的
    Map接口方法及含义
    在这里插入图片描述
    在这里插入图片描述
    举例:
    在这里插入图片描述
    注:Entry: 键值对 对象,在Map类设计是,提供了一个嵌套接口(static修饰的接口):Entry。Entry将键值对的对应关系封装成了对象,即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
    HashMap与HashTable:
    HashMap和Hashtable是Map接口的两个典型实现类
    区别:
    1 . Hashtable是一个古老的Map实现类, 不建议使
    2 .Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的。
    3.Hashtable不允许使用null作为key和value,而HashMap可以
    与HashSet集合不能保证元素的顺序一样,Hashtable、HashMap也不能保证其中key-value对的顺序
    HashMap和Hashtable是Map接口的两个典型实现类
    区别:
    Hashtable是一个古老的Map实现类, 不建议使用
    Hashtable是-个线程安全的Map实现,但HashMap是线程不安全的。
    Hashtable不允许使用null作为key和value,而HashMap可以
    ●与HashSet集合不能保证元素的顺序的顺序一样,Hashtable、HashMap也不能保证其中key-value对的顺序
    ●Hashtable、HashMap判断两个Key相等的标准是:两个Key通过equals方法返回true , hashCode值也相等。
    ●Hashtable、HashMap判断两个Value相等的标准是:两个Value通过equals方法返回true
    LinkedHashMap:
    LinkedHashMap是HashMap的子类
    LinkedHashMap可以维护Map的迭代顺序:迭代顺序与Key-Value对的插入顺序一致
    TreeMap:
    TreeMap存储Key-Value对时,需要根据Key对key-value对进行排序TreeMap可以保证所有的TreeMap存储Key-Value对时,需要根据Key对key-value对进行排序。TreeMap可以保证所有的Key-Value对处于有序状态。
    TreeMap的Key的排序:
    自然排序: TreeMap的所有的Key必须实现Comparable接口,而且所有的Key应该是同一个类的对象,否则将会抛出ClasssCastException
    定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责TreeMap中的所有key进行排序。此时不需要Map的Key实现Comparable接口
    例如:在这里插入图片描述
    Properties
    Properties 类是Hashtable的子类,该对 象用于处理属性文件
    由于属性文件里的key、value都是字符串类型,所以properties里的Key和Value都是字符串类型的
    在这里插入图片描述
    其他的常用API
    在这里插入图片描述
    常用集合类汇总
    在这里插入图片描述
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值