初学Java基础Day23---集合,Arraylist的使用,泛型
一,集合
集合就是一组数据的容器(和数组相似)
有些集合专门排序,有些专门出重,有些专门用于存放数据....
理解:
1.集合是Java API所提供的一系列类,可以用于动态存放多个对象(集合只能存对象)
2.集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定, 只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类)
3.集合类全部支持泛型,是一种数据安全的用法。
集合与数组的不同:
数组:一旦初始化后长度不可变,元素类型受限定(String类型的数组只能装String的数据),数组可以存储基本数据类型
集合:长度可变的序列,元素类型不受限定(一个集合可以存储多个数据类型的元素),集合只能存储引用数据类型
##
集合:既要存储数据,又要管理数据(增删改查)
.Collection家族
List接口
特点:有序且可重复(因为List接口中添加了许多针对下标操作的方法)
实现类:
ArrayList
LinkedList
Vector
Stack
二.接触ArrayList
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的使用
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中
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.泛型限定:
代码实现
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管理系统 -- 管理员工
代码实现:
//管理系统的接口
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);
}
//用户管理系统
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;
}
}
public class User {
}
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;
}
}
public class Book {
}
public class Student {
}
//学生管理系统
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;
}
}
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.泛型只支持引用数据类型
原文地址:https://blog.csdn.net/2401_87491344/article/details/143636219
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!