变量--容器 存储一个元素
数组--容器
一组具有某种特性的数据存放在一起;
存储一组元素(数据类型一致) 长度固定
自己定义了Box(ArrayBox LinkedBox)--容器
存储一组元素 长度可变;
集合--容器 是指具有某种特定性质的具体或抽象的对象汇总而成的集体;
是用来存储一组元素 长度可变;
集合java.util
Collection Map
存储的都是value 存储的是以key-value形式存在
List Queue Set
有序可重复 无序无重复 key无序无重复 value无序可重复
*ArrayList HashSet
Vector TreeSet
Stack(LIFO)
*LinkedList
add() add()
remove() remove()
set()
get() iterator()
size() size()
序:顺序 添加进去的元素 取得元素的顺序一致 注意指的不适集合自己的顺序
重复:两个对象元素一致
ArrayList、Vector区别-->StringBuilder StringBuffer
List集合
1.ArrayList 2.LinkedList(双向链表) 3.Vector 4.Stack(一个口,先进后出)
1.ArrayList
所属的包 java.util
如何创建对象
无参数构造方法 带默认空间的构造方法 带collection参数的构造方法
常用方法--小容器(CURD 增删改查)
增删改查 add() remove() set() get() size()
addAll removeAll retainAll indexOf lastIndexOf contains() subList()
isEmpty() clear() ensureCapacity() iterator()
toArray() trimToSzie()
由于arrayList底层是一个Object[] 什么类型都可以存进去
取出来的时候多态的效果 需要自己造型 显得用起来非常的麻烦
JDK1.5之后-->泛型
用来规定数据类型的,定义的时候用一个符号代替某种类型
在使用的时候用具体的数据类型 将定义的那个符号替换掉
ArrayList特点适合遍历轮询 不适合插入删除;
泛型可以用在哪里?(not 造型)
在类或接口描述的时候 可以使用某种符号来表示一个未知的类型
在类型使用的时候 需要一个具体类型来代替
注意:泛型需要使用引用数据类型来代替
1.泛型类
类定义的时候描述某种数据类型 集合的使用就是这样
2.泛型接口
与泛型类的使用基本一致 子类实现接口时必须添加泛型
3.泛型方法
方法调用时传参数;方法的泛型与类无关 带有泛型的方法可以不放在带有泛型的类中;
4.高级泛型 规范边界 Extends super
import java.util.*; public class Test0519{ public static void main(String[] args){ ArrayList<String> a=new ArrayList<String>(); a.add("abc"); a.add("10"); a.add("true"); a.add("3.4"); for(int i=0;i<a.size();i++){ System.out.println(a.get(i)); }//返回集合a中每个元素 System.out.println(a);//显示a中元素;重写了toString; System.out.println(a.size());//显示长度; int l=a.size();//a总长度;//每删除一个索引数据,则a长度-1;与数组不同,数组长度不变; for(int i=0;i<l;i++){ System.out.println("即将删除元素是:"+a.get(0)+";此时a总长度为:"+a.size()); a.remove(0); } System.out.println(a);//显示a中元素; System.out.println(a.size());//全部删除后,a中元素; } }
import java.util.*; public class Test0519{ public static void main(String[] args){ ArrayList<Integer> a=new ArrayList<Integer>(); a.add(10); a.add(2); a.add(3); ArrayList<Integer> b=new ArrayList<>(); b.add(100); b.add(200); //b中所有元素添加到a中 //a.addAll(b);//[10,2,3,100,200]并集 a.addAll(1,b);//[10,100,200,2,3] 插入 System.out.println(a); //a.clear();//[] boolean ise=a.contains(200);//包含 System.out.println(ise); System.out.println(a); int x=a.indexOf(2);//该数第一个索引号; System.out.println(x); int y=a.lastIndexOf(2);//该数最后一个索引号; System.out.println(y); System.out.println(a.isEmpty());//空? a.remove(0);//删除0号索引的值; System.out.println(a); a.remove(new Integer(2)); System.out.println(a); a.retainAll(b);//交集 System.out.println(a); System.out.println(b); a.set(1,300);//改 System.out.println("set:"+a); a.removeAll(b);//差集 System.out.println("ab差集"+a); //集合交集,并集,差集 System.out.println("a长度:"+a.size()); System.out.println("b截取:"+b.subList(0,1)); Integer[] mm=new Integer[a.size()]; a.toArray(mm);//集合变成数组; System.out.println(mm.length); a.trimToSize();//变成有效元素个数那么长 System.out.println(a); } }
泛型不能使用基本类型--如果想要使用基本类型 需要使用其对应的包装类
总结
集合有很多类 非常庞大的一个系统
1.了解集合的每一个具体的分支 各种特点;
2.常用的集合的方法;
3.每一个集合的特点;
4.集合底层的原理;