Java集合(理解)——学习笔记

Java集合

Java中的集合类主要有三种,List(列表)、Set(集)、Map(映射)

Collection接口

最基本的集合接口,没有直接继承Collection的,都是继承Collection的子接口,如List、Set

  • 实现Collection的接口都有两个标准的构造函数,一个无参的构造函数,创建一个空的集合,一个有参构造函数,创建一个存放参数的集合。

  • Collection的接口中有一个Iterator()方法,返回一个迭代器。我们可以操作这个迭代器足个访问集合中的元素。(Iterator it = collection.iterator();)迭代器

  • Collection是所有单列集合的父接口,在Collection接口中,定义了单列集合通用的一些方法,这些方法可以操作所有的单列集合。

    返回值方法名说明
    booleanadd(E e)把指定对象添加到集合
    booleanaddAll(Collection<?extends E> c)把指定集合所有的元素添加到此集合中
    voidclear()清空集合
    booleancontains(Object o)此集合中存在指定元素返回true否则false
    booleanisEmpty()判断此集合是否为空
    booleanremove(Object o)删除集合中的指定元素(如果存在)(可选操作)
    intsize()返回此集合中元素的个数
    Object[]toArray()把集合中的元素存入数组中

List集合

List接口

java.util.List接口继承自Collection接口,是单列集合的一个重要分支,可以将实现了List接口的对象称为List集合。

  • List集合中的所有元素都是以一种线性方式进行存储的,
  • 特点:有序、可重复

List接口作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作的特有方法

返回值方法名说明
voidadd(int index,E element)将指定的元素添加到指定的位置上
Eget(int index)返回指定位置上的元素
Eremove(int index)删除指定位置上的元素,返回被移除的元素
Eset(int index,E element)用指定的元素,修改指定位置上的元素,返回更新前的元素
  • List接口提供了一个特殊的迭代器,ListIterator,

    • 它除了有Iterator接口提供的正常方法外,它还允许元素的插入和替换,以及双向访问,还有提供了一个方法从列表的指定位置开始列表迭代器。

      返回值方法名说明
      voidadd(E e)将指定的元素插入列表(可选操作)。
      booleanhasPrevious()如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回 true 。
      voidset(E e)用指定的元素(可选操作)替换 next()或 previous()返回的最后一个元素。

List的实现类

ArrayList

java.util.ArrayList集合数据存储的结构是数组结构,而且是一个动态的数组,数组的容量会随着集合中元素的个数自动扩大或缩小

  • 添加到ArrayList集合中的元素,都会有一个整数的序号(索引)从0开始
  • 特点:
    • 查找元素快,根据索引快速定位
    • 增删元素慢,每添加或者删除一个元素,都要把该位置以后的元素的索引进行调整
  • 日常开发中使用最多的一个用来查询的集合类
linkedList

java.util.LinkedList集合数据存储的结构是链表结构,是一个双向链表

  • 实际开发中一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首操作的方法
  • 特点:
    • 查找元素慢,查询一个元素需要从第一个元素开始,根据地址依次向后查询
    • 增删元素快,增删时只需要修改地址域

Set集合

Set接口

java.util.Set接口同样继承自Collection接口,它与Collection接口中的方法一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了,

  • 存入数据时,都会根据一定的规则保证存储的数据不出现重复
  • Set集合在数据存储和检索,效率都比较高
  • 特点:无序,不可重复

Set的实现类

HashSet

java.util.HashSet存储的数据结构是哈希表,

  • 它存储的元素都是不可重复的,并且没有顺序存储。存取时获得的元素顺序不一致
  • HashSet底层的实现类其实是一个HashMap
哈希表

JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一个hash值的元素都存储在一个链表里,但是当位于一个链表中的元素较多时(hash值相同的元素较多时),通过key值依次查找的效率较低。在JDK1.8中,哈希表的存储采用了数组+链表+红黑树结构,这样大大减少了查找的时间。

实现过程:

向Set集合中存储元素时,先调用hashCode方法,获得哈希码值,然后将哈希码值通过特定的算法获得一个内存地址,存入地址前,会先查看得到的内存地址中有没有存入元素(一个或者多个),如果有,先调用元素的equals方法进行内容比较,如果内容相同,直接引用已存在的对象,如果内容不同,进行行散列存放

(两个对象相同,哈希码值一定相同,哈希码值相同的对象,也可能是不同对象)

LinkedHashSet

HashSet集合中元素是无序的,如果我们想要Set集合存储的元素有顺序,那么就要用到LinkedHashSet

  • java.util.LinkedHashSet可以记录元素存储的顺序

Map集合

Map接口

Map用于保存具有映射关系的数据,总是以键值对的形式出现

和Collection接口没有关系,它也是一个顶级接口

  • Map接口存储的数据是双列集合的规则,Map<K,V>K代表键的类型,V代表值的类型
  • Map集合中的key和value可以是任何引用类型的数据,
  • key和value就是一对一的关系,一个key就可以找到他所对应的唯一value值
  • 特点:无序,key不可以重复,value可以重复
    • key在底层是使用Set集合存储的,所以说不可重复(如果使用自定义类对象作为键,必须重写hashCode和equals方法)

Map接口中的常用方法(和Collection接口相区别)

返回值方法名说明
Vput(V key,V value)将指定的键和值添加到集合
Vremove(Object key)将指定健的键值对在集合中删除,并返回value
Vget(Object key)获取指定健的value值并返回
Setkeyset()获取集合中所有的健,放入Set集合并返回
Set<Map.Entry<K,V>>entrySet()获取集合中所有键值对放入Set集合并返回

entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry 。使用这个方法可以方便我们遍历Map集合中的数据。

Entry

Map接口中的一个内部接口,该类中封装了一个键值对

三个方法:

返回值方法名说明
KgetKey()返回该Eentry里包含的key值
VgetValue()返回该Eentry里包含的value值
setValue(V value)设置该Eentry里包含的value值
public class Test1{
    public static void main(String[] args){
        Map<Character,Integer> map1 = Map.of('a',100,'b',200,'c',300);
        Set<Map.Entry<Character,Integer>> set1 = map1.entrySet();
        for (Map.Entry<Character,Integer> entry: set1){
            System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
            //遍历过程中也可以修改Map中的值
//            entry.setValue(10);
        }
    }
}

Map的实现类

HashMap

Map接口的一个实现类

  • 存储数据采用的是哈希表结构,元素的顺序不能保证
LinkedHashMap

继承自HashMap

  • HashMap中存储的与元素无序,但是还想使用HashMap的查询速度快,还想保证添加的元素有顺序,我们使用LinkedHashMap就可以做到
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值