初学Java基础Day23---集合,Arraylist的使用,泛型

一,集合

集合就是一组数据的容器(和数组相似)

有些集合专门排序,有些专门出重,有些专门用于存放数据....

理解:

1.集合是Java API所提供的一系列类,可以用于动态存放多个对象(集合只能存对象)

2.集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定, 只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类)

3.集合类全部支持泛型,是一种数据安全的用法。

集合与数组的不同:

数组:一旦初始化后长度不可变,元素类型受限定(String类型的数组只能装String的数据),数组可以存储基本数据类型

集合:长度可变的序列,元素类型不受限定(一个集合可以存储多个数据类型的元素),集合只能存储引用数据类型

集合:既要存储数据,又要管理数据(增删改查)

.Collection家族

List接口

特点:有序且可重复(因为List接口中添加了许多针对下标操作的方法)

实现类:

  1. ArrayList

  2. LinkedList

  3. Vector

  4. Stack

二.接触ArrayList

java 复制代码
import java.util.ArrayList;
public class Test01{
    
    //感受一个集合可以存储多个类型的数据
    //经验:平时不会将多个数据类型的数据存入一个集合中,因为不好管理
    
    public static void main(String[] args){
        ArrayList list = new ArrayList();
        
        list.add(100);//Integer.valueOf(100)
        list.add(123.123);//DOuble.valueOf(123.123)
        list.add("abc");
    }
}
2.ArrayList的使用
java 复制代码
package com.qf.arraylist_class;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Test02 {
	/**
	 * 知识点:ArrayList的使用
	 * 
	 * 注意:
	 * 		集合一旦定义了泛型,就规定了集合存储元素的类型
	 * 		所以说泛型是一种数据安全的做法
	 * 
	 */
	public static void main(String[] args) {
		
		//创建ArrayList集合的对象
		ArrayList<String> list = new ArrayList<>();
		
		//添加元素
		list.add("周杰伦");
		list.add("陈奕迅");
		list.add("王力宏");
		list.add("林俊杰");
		list.add("李荣浩");
		list.add("张学友");
		list.add("张国荣");
		
		//设置指定下标上的元素
		list.set(1, "邓紫棋");
		
		//获取指定下标上的元素
		String str = list.get(1);
		System.out.println("获取指定下标上的元素:" + str);//邓紫棋
		
		//获取元素个数
		int size = list.size();
		System.out.println("获取元素个数:" + size);//7
		
		//将元素添加到指定下标的位置
		list.add(4, "五月天");
		
		ArrayList<String> newList1 = new ArrayList<>();
		Collections.addAll(newList1, "aaa","bbb","ccc","ccc");//利用Collections工具类给集合做批量添加
		list.addAll(newList1);//将newList1中所有的元素添加到list集合的末尾
		
		ArrayList<String> newList2 = new ArrayList<>();
		Collections.addAll(newList2, "xxx","yyy","zzz","zzz");//利用Collections工具类给集合做批量添加
		list.addAll(4, newList2);//将newList2中所有的元素添加到list集合指定下标的位置
		
		//清空集合中所有的元素
		//list.clear();
		
		System.out.println("判断集合中是否包含指定元素:" + list.contains("邓紫棋"));//true
		System.out.println("判断集合中是否包含子集合中所有的元素:" + list.containsAll(newList1));//true
		
		System.out.println("获取集合中第一次出现该元素的下标:" + list.indexOf("ccc"));//13
		System.out.println("获取集合中最后一次出现该元素的下标:" + list.lastIndexOf("ccc"));//14
		
		System.out.println("判断集合中是否没有元素:" + list.isEmpty());//false
		
		list.remove(0);//根据下标删除元素
		list.remove("林俊杰");//根据元素删除元素
		list.removeAll(newList1);//删除list中包含newList1的元素(去除交集)
		
		list.retainAll(newList2);//保留list中包含newList2的元素(保留交集)
		
		List<String> subList = list.subList(1, 3);//截取开始下标(包含)到结束下标(排他)处的元素,返回新的List集合
		
		//将集合转成数组
		Object[] objs = subList.toArray();
		System.out.println(Arrays.toString(objs));
		
		//将集合转成数组
		String[] ss = new String[2];
		subList.toArray(ss);
		System.out.println(Arrays.toString(ss));
		
		System.out.println("--------------------------------");
		
		//遍历数据 -- for循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		System.out.println("--------------------------------");
		
		//遍历数据 -- foreach
		for (String element : list) {
			System.out.println(element);
		}
		
		System.out.println("--------------------------------");
		
		//遍历数据 -- Iterator
		Iterator<String> it = list.iterator();
		while(it.hasNext()){//判断是否有可迭代的元素
			
			String element = it.next();//返回下一个元素
			System.out.println(element);
		}
		
		System.out.println("--------------------------------");
		
		//遍历数据 -- ListIterator
		ListIterator<String> listIterator = list.listIterator();
		while(listIterator.hasNext()){//判断是否有可迭代的元素
			
			String element = listIterator.next();//返回下一个元素
			System.out.println(element);
		}
		
		
		
	}
}

三,泛型

含义:泛型是一种数据安全的做法

1.初识泛型:

在ArrayList中

java 复制代码
import java.util.ArrayList;
public class Test01{
    
    public static void main(String[] args){
        
        //<String>  这就是泛型
        ArrayList<String> list  = new ArrayList<>();
        
        list.add("aaa");
        list.add("bbb");
        
        
        MyArrayList<String> myArrayList = new MyArrayList<>();
		
		myArrayList.add("aaa");
		myArrayList.add("bbb");
		myArrayList.add("ccc");

    }
}

/**
 * E - element - 元素
 * T - type - 类型
 * K - key - 键
 * V - value - 值
 * 
 * 注意:泛型可以设置多个,使用逗号隔开
 * ps:public class HashMap<K,V>{}
 */
public class MyArrayList<E> {

	public void add(E e){
		
	}
	
}
2.泛型限定:
代码实现
java 复制代码
import java.util.ArrayList;

public class Test01 {
	/**
	 * 知识点:泛型限定
	 * 含义:规定了泛型类型的范围
	 */
	public static void main(String[] args) {
	}
	
	//?表示任何类型
	public ArrayList<?> method01(){
		
		//ArrayList<Object> list = new ArrayList<>();
		//ArrayList<String> list = new ArrayList<>();
		//ArrayList<Integer> list = new ArrayList<>();
		//ArrayList<A> list = new ArrayList<>();
		ArrayList<B> list = new ArrayList<>();
		
		return list;
	}
	
	//? extends A 表示A类或其子类
	public ArrayList<? extends A> method02(){
		
		//ArrayList<A> list = new ArrayList<>();
		ArrayList<B> list = new ArrayList<>();
		
		return list;
	}
	
	//? super A 表示A类或其父类
	public ArrayList<? super A> method03(){
		
		//ArrayList<A> list = new ArrayList<>();
		ArrayList<Object> list = new ArrayList<>();
		
		return list;
	}
}

public class A{

}

public class B extends A{

}
3.泛型在项目中的应用:

需求:编写通用的管理系统的接口 分析: 学生管理系统 -- 管理学生 淘宝后台管理系统 -- 管理用户 OA管理系统 -- 管理员工

代码实现:

java 复制代码
//管理系统的接口
public interface ManagerSystem<T> {

	public int add(T t);
	
	public int delete(T t);
	
	public int update(T t,int type,Object val);
	
	public int getElementIndex(T t);
	
	public T getElement(T t);
	
	
}
java 复制代码
//用户管理系统
public class UserManagerSystem implements ManagerSystem<User>{

	@Override
	public int add(User t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int delete(User t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(User t, int type, Object val) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getElementIndex(User t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public User getElement(User t) {
		// TODO Auto-generated method stub
		return null;
	}

}
java 复制代码
public class User {

}
java 复制代码
public class BookManagerSystem<T> implements ManagerSystem<T> {

	@Override
	public int add(T t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int delete(T t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(T t, int type, Object val) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getElementIndex(T t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public T getElement(T t) {
		// TODO Auto-generated method stub
		return null;
	}

}
java 复制代码
public class Book {

}
java 复制代码
public class Student {

}
java 复制代码
//学生管理系统
public class StudentManagerSystem implements ManagerSystem<Student>{

	@Override
	public int add(Student t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int delete(Student t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(Student t, int type, Object val) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getElementIndex(Student t) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Student getElement(Student t) {
		// TODO Auto-generated method stub
		return null;
	}

}
java 复制代码
public class Test01 {
	/**
	 * 知识点:泛型在项目中的应用
	 * 
	 * 需求:编写通用的管理系统的接口
	 * 分析:
	 * 		学生管理系统 -- 管理学生
	 * 		淘宝后台管理系统 -- 管理用户
	 * 		OA管理系统 -- 管理员工
	 */
	public static void main(String[] args) {
		
		//学生管理系统 -- 管理的是学生对象
		StudentManagerSystem sms = new StudentManagerSystem();
		sms.add(new Student());
		
		System.out.println("----------------------");
		
		//用户管理系统 -- 管理的是用户对象
		UserManagerSystem ums = new UserManagerSystem();
		ums.add(new User());
		
		System.out.println("----------------------");
		
		//图书管理系统 -- 管理的是书名
		BookManagerSystem<String> bms1 = new BookManagerSystem<>();
		bms1.add("Java从入门到精通");
		
		
		//图书管理系统 -- 管理的是图书类别
		BookManagerSystem<String> bms2 = new BookManagerSystem<>();
		bms2.add("小说类");
		bms2.add("科技类");
		bms2.add("历史类");
	}
}
注意:

1.泛型只在编码阶段有效,不会编译到class文件中;

2.泛型只支持引用数据类型

相关推荐
又蓝22 分钟前
使用 Python 操作 Excel 表格
开发语言·python·excel
小灰灰要减肥22 分钟前
装饰者模式
java
张铁铁是个小胖子33 分钟前
MyBatis学习
java·学习·mybatis
余~~1853816280034 分钟前
稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
开发语言·人工智能·python·音视频
Am心若依旧4091 小时前
[c++11(二)]Lambda表达式和Function包装器及bind函数
开发语言·c++
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 20课题、单元测试
开发语言·青少年编程·单元测试·编程与数学·goweb
Yan.love1 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶1 小时前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥1 小时前
java提高正则处理效率
java·开发语言
VBA63372 小时前
VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
开发语言