FIFTH(11.13~11.19)

集合

集合体系结构(单列和双列)

单列结构(一次添加一个元素)

List系列集合:添加的元素是有序(存和取的顺序是一样的),可重复(集合种存取的元素是可重复的),有索引(可通过索引去获取集合中的每一个元素)

Set系列集合:添加的元素是无序(存和取的顺序不一定相同,比如存的时候,123,取的时候,132),不重复(不能存储重复的元素),无索引。

Collection

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

Collection是一个接口,我们不能直接创建他的对象。只能创建他实现类的对象,实现类:ArrayList

Collection的遍历方式

迭代器遍历,增强for遍历,Lambda表达式遍历

迭代器遍历

迭代器不依赖索引

增强for遍历

数据结构(计算机底层存储,组织数据的方式)

数据结构(链表)

每个节点都是一个元素

数组是一片连续的空间,查询某一个数时不需要从头开始,查询速度相对快。

ArrayList

LinkedList

Set

Set接口中的方法基本上与Collection的API一致

Set集合是不包含重复元素的集合

Set是一个接口,不能直接实例化。需要它的实现类HashSet<类型>,对集合的迭代顺序没有任何保证。

用boolean可判断元素是否添加成功

HashSet

哈希值:对象的整数表现形式

根据公式计算出在数组中应存储的位置

哈希碰撞有可能发生,但是概率不高

HashSet底层原理

LinkedHashSet

TreeSet

双列集合(每次添加两个元素或者说一对元素)

键和值一一对应

Map中常见的API

Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的

put方法可添加和覆盖

Map是一个接口,不能直接创建对象,需要借助它的实现类来创建对象

Map里面可以存两个元素,一个键,一个值,所以我们在使用时要定义两个泛型(Map<键:String,值:String>)

Map的遍历方式(键找值,键值对,Lambda表达式)

键找值

键值对

依次获取键值对对象,再通过getKey()方法获得每一个键,通过getValue()方法获取每一个对象

Lambda表达式

HashMap

LinkedHashMap

可以保证存和取的顺序一致

TreeMap

默认情况下,输出仍按1,2,3,4,5的顺序,若要按照升序来排,直接打印

hashCode()和equals()方法的重写

重写hashCode()和equals()方法是为了在使用Java集合框架时能够正确地比较对象。

示例:

public class Person {

private String name;

private int age;

   public Person(String name, int age) {

       this.name = name;

       this.age = age;

 }

@Override

 public boolean equals(Object o) {

   if (this == o)

    return true;

   if (o == null || getClass() != o.getClass()) 

    return false;

    Person person = (Person) o; 

    return age == person.age && Objects.equals(name, person.name);

 }

@Override

 public int hashCode() {

 return Objects.hash(name, age);

 }

}

在上面的示例中,重写了equals()方法和hashCode()方法。equals()方法比较两个对象是否相等,而hashCode()方法返回对象的哈希码。

当重写equals()方法时,必须同时重写hashCode()方法,以确保在使用Java集合框架时能够正确地比较对象。如果不重写hashCode()方法,则可能会导致对象在集合中无法正确地比较。

Object类

object类是Java中所有类的父类

常用方法有

  1. equals(Object obj)方法:用于比较两个对象是否相等,返回一个布尔值。
  2. hashCode()方法:返回对象的哈希码值。
  3. toString()方法:返回对象的字符串表示形式。
  4. getClass()方法:返回对象的类。
  5. clone()方法:创建并返回此对象的一个副本。
  6. finalize()方法:在垃圾回收器回收对象之前调用。
  7. wait()方法:导致当前线程等待,直到另一个线程调用该对象的notify()或notifyAll()方法。
  8. notify()方法:唤醒在此对象监视器上等待的单个线程。
  9. notifyAll()方法:唤醒在此对象监视器上等待的所有线程。

使用Object类的equals()和toString()方法:

public class Person {

    private String name;

    private int age;

public Person(String name, int age) {

     this.name = name;

     this.age = age;

 }

@Override

  public boolean equals(Object obj) {

         if (obj == this) {

             return true;

      } if (!(obj instanceof Person)) {

             return false;

      }

            Person other = (Person) obj;

            return this.name.equals(other.name) && this.age == other.age;

}

@Override

   public String toString() {

         return "Person{name='" + name + "', age=" + age + "}";

   }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值