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

    String[] arr=new String[2];
    arr[0]="aa";
    arr[1]="bb";
    arr[3]="cc";
    for(int i=0;i

上面一段代码会出现数组下标越界的异常,更何况我们大部分情况下都是从前端接收数据,对于数据量更不可控
集合解决了Java中数组不能动态扩充的特性
collection与list和set还有其他集合的关系图**
set、list集合的遍历、list集合的常用方法_第1张图片
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

在这里插入图片描述
2 第二种for循环遍历,语法懂通不过,因为list.add添加元素的时候并不知道添加的是什么类型,所以就用到了泛型
set、list集合的遍历、list集合的常用方法_第2张图片
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 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 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 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 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 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 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 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 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 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 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 list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.remove(2);
    list.forEach(s->{System.out.println(s);});
}
}

在这里插入图片描述

你可能感兴趣的:(测开)