Java集合总结

集合总结

泛型:

泛型存在的意义:

我们知道集合可以存储多种数据类型的元素,这个特点是集合的好处,同时也是集合的弊端。假设我们使用集合存储了多种数据类型的元素,那么后期我们需要对这些数据进行操作的时候,我们就需要遍历集合,获取每一个元素,然后判断当前这个元素的数据类型是什么,针对不同的数据类型,我们需要做不同的处理,比较麻烦.为简化集合的使用,Jdk1.5以后就提供了一种安全机制,就是泛型。使用泛型来限定我们集合中可以存储数据的元素类型。

泛型的概念:
泛型是JDK1.5后提供的新特性,是一种参数化类型.主要是将我们需要使用的类型进行参数化,提供了编译时安全检测机制. 类似方法定义上的形式参数,定义时我们并不知道其具体值,调用方法时才知道. 泛型也类似,在定义时不知道具体的数据类型,在使用时才知道.
泛型的定义及定义位置:

   定义格式:     <标识符1 , 标识符2, ....>
   定义位置:     类,方法, 接口
泛型的好处:

①将运行期的错误提前到编译期;
②避免强制类型转换

泛型通配符:
 泛型通配符:?  表示的意思是不确定的类型
?extends E : 向上限定,表示的是E或者E的子类
?super E :向下限定,表示的是E或者E的父类 
泛型通配符常见的使用场景:

在方法上定义了一个集合类型,不明确集合类型中所存储的数据的元素类型,此时我们就需要去使用泛型通配符.
目的:就是为了提高方法的灵活性.
例如:

// 后期在调用method方法的时候需要传递一个Collection的子类对象,而这个子类对象中的元素的数据类型可以是Number或者Number的子类
public static void method(Collection<? extends Number> collection) {
方法体....
}

集合

集合的体系结构

在这里插入图片描述

Collection集合的常见方法(增/删/改/查):
boolean add(E e);										 // 添加元素
boolean remove(Object o);								 // 从集合中移除指定的元素
default boolean removeIf(Predicate<? super E> filter);	// 根据指定的条件从集合中删除元素
void clear();											 // 清空集合中的元素
boolean contains(Object o);								// 判断集合中是否存在指定的元素
boolean isEmpty()										// 判断集合是否为空
int size()						                       // 集合的长度,也就是集合中元素的个数

//根据指定的条件从集合中删除元素方法演示:
//需求:删除集合中长度为3的元素
@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);    //仅有test一个抽象方法
    }
//removeIf(Predicate<? super E> filter),该方法需要一个Predicate类型的参数,Predicate为一个函数式接口,所以在使用removeIf方法时可传入Predicate接口的匿名内部类或者Lambdab表达式
代码如下:
Collection<String> list = new ArrayList<>();   //多态形式创建一个Collection集合
            list.add("aaa");                    //boolean add(E e);添加元素
            list.add("abc");
            list.add("ccc");
            list.add("edfg");
            list.add("2222");
            list.add("王二麻子");
            //1.匿名内部类:
            list.removeIf(new Predicate<String>() {
                @Override
                public boolean test(String s) {
                    return s.length()==3;   //删除长度为3的元素
                }
            });
            //2.Lambda表达式:
             list.removeIf(s ->s.length()==3);   
            System.out.println(list);
            
以上两种方式的运行结果:[edfg, 2222, 王二麻子]

Collection是接口,用多态形式创建对象:

举例:
// Collection后面<>中使用了String这个数据类型,表示的含义就是用来限定我们这个集合对象中只能存储String类型的元素
Collection<String> collection = new ArrayList<>();
Collection集合的遍历操作:

1.迭代器. //Collection集合特有

//1.获取迭代器对象:
Iterator<E> iterator();		// Collection集合中提供的方法,用来获取迭代器,<>中定义的元素类型就是集合中存储的元素类型
//2.调用迭代器对象方法来获取元素
E next();				// 用来获取元素的
boolean hasNext();	// 判断集合中是否存在下一个元素

2.增强for循环. //jdk1.5以后提供的一个新的语法,主要是用来遍历Collection集合和数组的。

//增强for循环格式:
for(元素数据类型 变量名 : 要遍历的数组或者集合的名称) {
	操作变量
}
//温馨提示:IDAE中可快捷自动生成增强fo格式:      要遍历的数组或者集合的名称.for

3.forEach方法
//Consumer接口是个函数式接口

//forEach方法
list.forEach(Consumer<? super T> action){ }          //forEach方法,需要传入Consumer类型的参数,如上,是个函数式接口.可通过Lambda表达式来传入参数.
Collection集合练习
/**
 * 需求:使用Collection集合来存储学生对象并进行遍历
 * 分析:
 * 1、	创建一个Collection集合对象
 * 2、	创建一个学生类(Student --- > 姓名 , 年龄)
 * 3、	创建学生对象
 * 4、	把学生对象添加到集合中
 * 5、	对集合进行遍历获取每一个学生对象,然后将学生对象的信息打印到控制台
 * a)	使用迭代器进行遍历
 * b)	使用增强for循环进行遍历
 */
 学生类:
 public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

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

测试类:
public class CollectionTest1 {
    public static void main(String[] args) {
        Collection<Student> list=new ArrayList<>();
        Student stu1=new Student("hanhan",23);
        Student stu2=new Student("xiaoming",28);
        Student stu3=new Student("dalang",33);
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        //使用迭代器进行遍历
        Iterator<Student> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("*****************************************");
        //使用增强for循环进行遍历
        for (Student student : list) {
            System.out.println(student);
        }
        System.out.println("*****************************************");
        //forEach 方法
        list.forEach(student -> System.out.println(student));
    }
}
List集合特点

1.元素是有序的(存入和取出顺序一致); 2.元素可以重复; 3.每个元素都存在索引值

List集合特有方法
void add(int index,E element)				// 在此集合中的指定位置插入指定的元素
E remove(int index)							// 删除指定索引处的元素,返回被删除的元素
E set(int index,E element)					// 修改指定索引处的元素,返回被修改的元素
E get(int index)							// 返回指定索引处的元素

List集合下常见的类ArraryList/LinkdeList…

ArrayList集合源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值