Java进阶08(五种数据结构、List接口、Set接口、对象的哈希值、contains方法)

Part 01:五种数据结构

1、堆栈结构:
只有一个出口的容器;
特点:先进后出(FILO)
在这里插入图片描述

2、队列结构:
就是一个两端都有开口的容器,一边入口一边出口;
特点:先进先出(FIFO)在这里插入图片描述

3、数组结构:(连续的,查询快,增删慢)
特点:查询速度快(因为有下标)
增删速度慢(因为定长)在这里插入图片描述

4、链表结构:(可以连续可以分散,增删快,查询慢)
特点:查询速度慢;
增删速度快;

在这里插入图片描述在这里插入图片描述
5、哈希表结构:(数组+链表)
特点:查询快,增删快;

Part 02:List接口

1、List接口的特点:

  • 有下标;
  • 有序的(有序不是自然顺序,有序指的是存和取的顺序一致);
  • 元素可重复;

2、List接口的实现类:

  • ArrayList:底层采用数组结构,查询快,增删慢;
  • LinkedList:底层采用链表结构,查询慢,增删快;
  • Vector:和ArrayList基本类似,但效率比它低,因为它是线程安全的;

3、List接口中具有的方法:

  • 增:add(E e)//从Collection继承而来;
    add(Int index,E e)//特有的,因为List有下标;
  • 删:remove(Object obj);//继承而来
    remove(int index);//特有的;
  • 改:set(int index,E e);//特有
  • 查:get(int index);//特有
  • 其他:size( ),clear( ),contains(Object obj),toArray( ),
    iterator( ),isEmpty( )//判断是否为空

4、List接口实现类的方法:

  • ArrayList:方法基本和List中定义的一致;

  • LinkedList:除了和List接口中一样的方法之外,还有大量首尾操作的方法

    • 第一组:void addFirst(E e);
      void addLast(E e);
    • 第二组:E removeFirst( );//删除首个元素,返回被删除的元素;
      E removeLast( );//删除尾部元素,返回被删除的元素;

    • 第三组:E getFirst( );
      E getLast( );

    • 第四组:E pop( );//弹出,删除集合中的第一个元素,与removeFirst功能一致
      void push(E e);//推入,把一个元素添加到集合中,与addFirst功能一致

Part 03:Set接口

1、Set接口的特点:

  • 无下标;
  • 无序的(无序指的是存和取的顺序不一定一致)LinkedHashSet和TreeSet除外;
  • 元素不可重复;

2、Set接口的实现类:

  • HashSet:底层采用哈希表结构,查询快,增删快,无序的
  • LinkedHashSet:底层采用 链表+哈希表 ,查询快,增删快,有序的
  • TreeSet

3、Set接口中具有的方法:
方法和父接口Collection基本一样
4、Set接口实现类的方法:
HashSet、LinkedHashSet中的方法基本和Set接口一致;

Part 04:对象的哈希值
1、对象的哈希值

  • 任何对象,都有一个哈希值,哈希值是对象的一个数字表示;
  • 对象的字符串表示:toString方法,默认表示格式:包名.类名@哈希值的16进制

2、如何获取对象的哈希值:
每一个对象都有一个方法,hashCode方法,这方法定义在了Object类中,所以每个对象都具有;
3、哈希值的由来:
哈希值是由真正的地址值计算的,通过一种散列算法(哈希算法);
所以一般来说地址值不一样,哈希值也是不一样的;
4、String对象的哈希值:

  • 在String类中重写了hashCode方法,哈希值不再通过地址值计算;
  • 观察源码发现,String对象的哈希值通过字符串的内容计算,所以只要字符串内容相同,哈希值必定相同;但是两个字符串的哈希值一样,内容不一定相同(如:abc 和acD)

5、哈希表结构,添加元素如何判断是否重复:

  1. 判断新旧元素的哈希值是否相同,如果不相同,直接判断不重复;否则,执行第二步
  2. 通过equals方法判断新旧元素内容是否一致,如果返回true,判断重复;否则,判定不重复;
    总结:只有hashCode一致,并且equals返回true时才判定重复;

6、HashSet存储自定义元素:
必须重写自定义类的hashCode和equals方法 ,才能确保元素的唯一性;
IDEA可以使用快捷键command+N选择自动重写这两个方法;
在这里插入图片描述
7、定义一个标准类:

  • 封装(private+get/set)
  • 构造(无参+全部)
  • toString(快速打印对象信息)
  • hashCode和equals(保证元素使用哈希表结构存储时的唯一性)

Part 05:contains方法

1、ArrayList的contains方法:
判断集合中是否包含某一个元素;原理:只判断equals的返回值,若返回值为true,表示包含;
2、HashSet的contains方法
判断集合中是否包含某一个元素;原理:和add方法一致;先判断哈希值,再使用euqals方法;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值