Java类集--------1

本文深入探讨Java集合框架的核心概念,包括Collection接口、List接口及其重要实现如ArrayList、Vector和LinkedList。解析动态数组如何解决数组定长问题,以及泛型如何避免向下转型。同时,文章详细介绍了List接口的独特方法,如get和set,以及如何通过覆写equals方法在List中正确使用自定义类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA类集(数据结构+多线程)在java.util.*;

--动态数组(当元素个数达到最大值时,动态增加容量)

 

  1. JAVA类集产生-JDK1.2

动态数组:解决数组定长问题

 

1.2 Collection接口:单个对象保存的最顶层父接口

 

单个对象保存:Collection接口以及其子接口,在每次数据操作时只能够对单个对象进行处理.

(泛型就是为了类集而服务的)泛型:避免了向下转型

public interface Collection<E> extends Iterable<E>

 

 

1.3 Iterable<E>:迭代器接口(就是为了遍历集合)

Iterator<T> iterator();取得集合的迭代器,JDK1.5之前直接写在Collection接口中

 

 

1.4Collection接口中提供的核心方法:

Add(T t):向类集中添加元素

iterator()取得类集的迭代器

Collection接口只定义了存储数据的标准,但是无法区分存储类型。因此在实际中我们往往使用两个子接口List(允许数据重复),set(不允许数据重复),一般不直接使用Collection接口。

 

  1. List接口(80%)---允许数据重复

在进行单个集合处理时,优先考虑List接口

 

在List接口中,拓展了两个重要方法(list接口独有)

Public E get(int index):根据索引下标取得数据

Public E set(int index,E  element);根据索引下标更新数据,返回修改前的数据

 

List(java.awt):是界面的东西,下拉链表

 

List接口有三个重要子类:ArrayList,Vector,LinkedList,这三个子类在使用时没有任何区别

代码如下:

import javax.sound.midi.Soundbank;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class wl {
    public static void main(String[] args) throws Exception {
       List<Integer> list=new ArrayList<> ();
       list.add (1);
       list.add (2);
       list.add (3);
       list.add (4);
        System.out.println (list);
        System.out.println (list.contains (4));
        System.out.println (list.size ());
        System.out.println (list.remove (3));//下标为数组的下标
        System.out.println (list.get (0));
        System.out.println (list.set (0,9));//返回修改前的值
        System.out.println (list);
    }
}

结果:

[1, 2, 3, 4]

true

4

4

1

1

[9, 2, 3]

 

 

List接口要想保存自定义的类的对象,该类必须覆写equals()来使用contains(),remove()等方法

import javax.sound.midi.Soundbank;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Person{
    private  String name;
    private   Integer  age;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
      //1.传进来是的是一个对象
        if(obj==this){
            return true;
        }else if(obj==null){
            return false;
        }else if(!(obj instanceof Person)){//传进来的是否是Person类的子类
            return false;
        }
        //向下转型还原为Person对象
        Person per=(Person)obj;
        return  this.age.equals (per.age)&&this.name.equals (per.name);
    }
}

public class wl {
    public static void main(String[] args) throws Exception {
        //想要保存自定义的Person对象
      List<Person> list=new ArrayList<> ();
      list.add (new Person ("",18));
        list.add (new Person ("",19));
        list.add (new Person ("",20));
        System.out.println (list);
        System.out.println (list.contains (new Person ("",18)));
        System.out.println (list.remove (new Person("",20)));
        System.out.println (list.size ());


    }
}
结果:

[Person{name='王', age=18}, Person{name='李', age=19}, Person{name='张', age=20}]

true

true

2

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值