JAVA集合与泛型



前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

JAVA集合和泛型?

Collection接口

  1. 集合概述:集合是java提供的一种容器
  • 类比于数组,数组也可以用来存储多个数据,那么数组和集合框架的区别:
  • 数组的长度是固定的,集合的长度是可变的。
  • 数组存储的是同一类型的元素,不仅可以存储基本基本数据类型,还可以存储对象。而集合存储的都是对象类型数据,而且对象类型可以不一致。一般在实际开发中对象对象较多,则需要使用集合框架将对象进行存储。
    2.所有的集合类都是位于java.unti包下,集合按照其存储的结构可以分为两大类,java.util.Collection和java.util.Map集合。Collection和Map是Java集合框架的根接口。在这两个根接口下,又包含了一些子接口或者实现类。

在这里插入图片描述

  • 从上图可以看到,List和Set都继承了Collection接口,在Collection接口中定义了它的所有所有子类集合中共性的方法,所有子类都可以使用这个共性的方法。
  • List

  • 有序的集合,存取和取出元素相同
  • 允许存储重复的元素
  • 有索引,可以使用普通的for循环遍历
  • 1、ArrayList集合
  • java.util.ArrayList集合是List接口的子类,ArrayList集合的数据存储结构是数组结构。元素增删慢,查找快,在日常开发中使用最多的功能为查询数据,遍历数据所以ArrayList集合是最常用的集合。
  • 2、LinkedList集合
  • java.util.LinkedList集合是List接口中的子类,LinkedList集合的数据存储是链表结构,方便添加和删除元素,但是查询元素稍慢。
  • Set

  • 无序的集合
  • 不允许存储重复的元素(元素的存取顺序和取出顺序不同)
  • 没有索引,不能使用普通的for循环遍历
    • 1、HashSet集合
  • java.util.Set是Set接口中的一个实现类,HashSet集合的底层数据结构是哈希表,HashSet集合是根据对象的哈希码值来确定元素在集合中的存储位置HashSet集合具有良好的存储性能和查找性能。

2、TreeSet集合

  • java.util.TreeSet也是Set接口的一个现实子类,它的底层数据结构是二叉树。在TreeSet集合中不允许有重复元素,同时TreeSet集合会对集合元素进行升序的顺序进行排序,方便了对数据进行访问和检索。

    • (1)自然排序,TreeSet集合保证元素唯一性的依据是java.langComparable接口的comparaTo()方法,comparaTo()方法的返回值有-1,0,1,其分别表示小于,等于,大于。Java中的系统类都会实现comparaTo()方法,因此返回的数据会按照升序的顺序进行排列,那么就不需要重写comparaTo()方法。
    • (2)自定义类重写compareTo()方法,Java中的系统类都需要有意义的,直观的,因此都实现了Comparable接口,但如果用户自定义的类都是需要排序的,则需要在自定义类重写comparaTo()方法
      Leg.
      创建两个学生对象:
      Student stu1=new Studen(“xxx”,10)
      Student stu2=new Student(“xxx”,10)
      虽然stu1和stu2的姓名和学号全部相同,但是直接添加TreeSet中也是可以的,因为两个对象的地址不同,所以TreeSet集合不会认为stu1和stu2是相同的元素,所以这里我们需要实现ComparaBle接口,重写comparaTo()方法,以姓名。年龄是否相同作为判断元素重复的依据,同时按照年龄进行排序。
      在这里插入图片描述
      在这里插入图片描述
  • 在这里插入图片描述

Map接口

  • Map 提供 Key 到 Value 的映射,一个 Map 中不能包含相同的 Key,每个 Key 只能映射一个 Value。Map 接口提供 3 种集合的视图,Map 的内容可以被当作一组 Key 集合,一组 Value 集合,或者一组 Key-Value 映射。

HashMap

Map 提供的主要方法:

    • boolean equals(Object o) 比较对象;
    • boolean remove(Object o) 删除一个对象;
    • put(Object key,Object value) 添加 key 和 value。
      允许null key和null value。
  • HashMap迭代子操作时间开销和容量正比,因此初始容量设置小一点。

TreeMap

  • 一种基于已排序且带导向信息Map的红黑树。每次插入都会按照自然顺序或者给定的比较器排序。

  • 这个Map需要实现equals方法和Comparable/Comparator。compareTo需要前后一致。这个类实现了一个NavigableMap接口:可以带有与键数量不同的入口,可以得到键的上一个或者下一个入口,可以得到另一Map某一范围的键(大致和SQL的BETWEEN运算符相同),TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

  • HashMap和TreeMap比较
    1)HashMap使用hashcode对元素进行快速查找,元素顺序不固定;TreeMap元素顺序通过key固定,想要得到有序结果,使用TreeMap。
    2)频繁索引,添加,删除元素使用HashMap,要求添加的键类明确定义了hashCode()和 equals()的实现。
    3)二树map一样,但顺序不一样,导致hashCode()不一样。在hashMap中,同样的值的map,顺序不同,equals时false;而在treeMap中,同样的值的map,顺序不同,equals时,true,说明,treeMap在equals()时是整理了顺序了的。

参考地址:https://blog.csdn.net/JasonZhangOO/article/details/55807685

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值