set、list集合的遍历、list集合的常用方法

本文介绍了Java集合框架中的List和Set的特点,如List的有序性和Set的唯一性。讲解了ArrayList和LinkedList的区别,强调了接口与实现类的概念。详细阐述了List接口的常用方法,包括add、遍历方式(普通for循环、增强for循环、迭代器和lambda表达式),并展示了如何使用泛型约束类型。同时提到了Set的遍历和添加元素的特性,以及size、contains、remove等操作。

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

    String[] arr=new String[2];
    arr[0]="aa";
    arr[1]="bb";
    arr[3]="cc";
    for(int i=0;i<arr.length;i++){
        System.out.println(arr[i]);
    }

上面一段代码会出现数组下标越界的异常,更何况我们大部分情况下都是从前端接收数据,对于数据量更不可控
集合解决了Java中数组不能动态扩充的特性
collection与list和set还有其他集合的关系图**
collection(收集)下有两个接口list、set
collection存储的是一组不唯一、无序的对象
list存储的是一组不唯一有序(插入顺序)的对象
set存储一组唯一,无序的对象

List list=new List();这样是被new不出的,因为List是接口,接口是不能被实例化的
List list=new ArrayList();这样就可以,因为ArrayList是List 的实现类
List list=new LinkedList();这样也可以,因为LinkedList也是List的实现类
ArrayList:遍历元素和随机访问元素的效率比较高;
LinkedList:插入、删除元素的效率比较个;
ArrayList和LinkedList都有add添加元素的方法
List接口常用方法
1 boolean add(Object o)

在列表额末尾顺序添加元素,起始索引位置从0开始
1 for循环遍历List

    import org.junit.Test;
    import java.util.ArrayList;
    import java.util.List;
    public class FirstClass {
        @Test
        public void test() {
            List list=new ArrayList();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("dd");
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
        }
    }

在这里插入图片描述
2 第二种for循环遍历,语法懂通不过,因为list.add添加元素的时候并不知道添加的是什么类型,所以就用到了泛型
在这里插入图片描述
3 List指定泛型添加元素,遍历List,List list=new ArrayList();指定泛型为String类型,打印直接打印变量s就好
语法结构:for(引用类型 变量:引用实例){}

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
	@Test
 public void test() {
    List<String> list=new ArrayList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("dd");
    for(String s:list){
        System.out.println(s);
    }
}
}

4 引用类型循环(List集合)
Person 是自定义类型,Person类的两个实例添加的是相同元素,打印出全部

import lombok.Data;  
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
 @Test
public void test() {
   Person person=new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1=new Person();
    person1.setName("aa");
    person1.setAge(10);
    List<Person> list=new ArrayList<>();
    list.add(person);
    list.add(person1);
    for(Person s:list){
        System.out.println(s.getName()+s.getAge());
    }
}
}

在这里插入图片描述

5 set元素不能重复
Person 是自定义类型,Person类的两个实例添加的是相同元素,只打印出一组数据,重复的被自动过滤

import lombok.Data;  
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
 @Test
public void test() {
    Person person=new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1=new Person();
    person1.setName("aa");
    person1.setAge(10);
    Set<Person> set=new HashSet<>();
    set.add(person);
    set.add(person1);
    for(Person s:set){
        System.out.println(s.getName()+s.getAge());
    }
}
}

在这里插入图片描述
6 set用迭代器遍历 Iterator
Person 是自定义类型,Person类的两个实例添加的是相同元素,只打印出一组数据,重复的被自动过滤

import lombok.Data;  
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
@Test
public void test() {
    Person person=new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1=new Person();
    person1.setName("aa");
    person1.setAge(10);
    Set set=new HashSet();
    set.add(person);
    set.add(person1);
    Iterator iterator=set.iterator();
    /**
     *用while循环,括号里用条件表达式,
     *条件表达式为true时,才遍历,否则不进入循环
     */
    while (iterator.hasNext()){
        /**
         *等号右边要加一个强制类型转换
         * 强制类型转换的前提:类型一致,否则抛异常
         * String s =(String) iterator.next();
         * 写成上面那句也是不报错的,但是运行后会报错
         * 因为类型不匹配,因为迭代器里的next方法返回的
         * 是Object类型的引用
         */
        Person s =(Person) iterator.next();
        System.out.println(s.getName()+s.getAge());
    }
    }
}

在这里插入图片描述
JDK1.8之后增加了lambda表达式
List的3种遍历方法
1 普通for循环在list循环遍历的第一个就写了
1 forEach遍历普通类型

public class FirstClass {
@Test
public void test() {
    List<String> list=new ArrayList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("dd");
    list.forEach(s->System.out.println(s));
}
}

2 forEach遍历自定义(引用)类型,forEach里比普通类型加了大括号

import lombok.Data;  
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("aa");
    person1.setAge(10);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.forEach(p -> {System.out.println(p.getName()+p.getAge());});
}
}

set也可以用forEach遍历与list相同(普通类型、自定义类型:传泛型)

List集合的其他方法
1 void add(int Index,Object o)把第index个以及第index个以后的元素都往后移一位,再把obj放到index的位置;这个过程需要考虑index的合理性以及是否会溢出等问题

public class FirstClass {
@Test
public void test() {
    List<String> list=new ArrayList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add(0,"xx" );
    list.forEach(s->System.out.println(s));
}
}

在这里插入图片描述
2 Int size()返回列表中的元素个数

public class FirstClass {
@Test
public void test() {
    List<String> list=new ArrayList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("dd");
    list.add("ee");
    System.out.println(list.size());
}
}

在这里插入图片描述
3 Object get(int Index)返回指定索引位置处的元素,取出的是Object类型,使用前需要进行强制类型转换,不过下面这个例子没强制转换也OK

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    Person p=list.get(2);
    System.out.println(p);
}
}

在这里插入图片描述
4 boolean contains(Object o)判断列表中是否存在指定元素 contains(包含)

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    boolean s=list.contains(person);
    System.out.println(s);
}
}

在这里插入图片描述
5 boolean remove(Object o)从列表中删除指定元素

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.remove(person);
    list.forEach(s->{System.out.println(s);});
}
}

在这里插入图片描述
6 boolean remove(int Index)从列表中删除指定位置元素,起始索引位置从0开始

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.remove(2);
    list.forEach(s->{System.out.println(s);});
}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值