自学内容网 自学内容网

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

一,集合

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

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

理解:

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

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

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

集合与数组的不同:

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

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

##

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

.Collection家族

List接口

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

实现类:

  1. ArrayList

  2. LinkedList

  3. Vector

  4. 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)!