一,集合
集合就是一组数据的容器(和数组相似)
有些集合专门排序,有些专门出重,有些专门用于存放数据....
理解:
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("邓紫棋"));//trueSystem.out.println("判断集合中是否包含子集合中所有的元素:" + list.containsAll(newList1));//trueSystem.out.println("获取集合中第一次出现该元素的下标:" + list.indexOf("ccc"));//13System.out.println("获取集合中最后一次出现该元素的下标:" + list.lastIndexOf("ccc"));//14System.out.println("判断集合中是否没有元素:" + list.isEmpty());//falselist.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("--------------------------------");//遍历数据 -- foreachfor (String element : list) {System.out.println(element);}System.out.println("--------------------------------");//遍历数据 -- IteratorIterator<String> it = list.iterator();while(it.hasNext()){//判断是否有可迭代的元素String element = it.next();//返回下一个元素System.out.println(element);}System.out.println("--------------------------------");//遍历数据 -- ListIteratorListIterator<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>{@Overridepublic int add(User t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int delete(User t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int update(User t, int type, Object val) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int getElementIndex(User t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic User getElement(User t) {// TODO Auto-generated method stubreturn null;}}
public class User {}
public class BookManagerSystem<T> implements ManagerSystem<T> {@Overridepublic int add(T t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int delete(T t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int update(T t, int type, Object val) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int getElementIndex(T t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic T getElement(T t) {// TODO Auto-generated method stubreturn null;}}
public class Book {}
public class Student {}
//学生管理系统
public class StudentManagerSystem implements ManagerSystem<Student>{@Overridepublic int add(Student t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int delete(Student t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int update(Student t, int type, Object val) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int getElementIndex(Student t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic Student getElement(Student t) {// TODO Auto-generated method stubreturn 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.泛型只支持引用数据类型