一,集合的由来
我们在程序开发的过程中,根本不知道需要多少个数量的对象,甚至不知道它们准确的数据类型,为了满足这些常规的需求,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?首先我们想到了数组,但是数组只能存储同一种类型的对象,而且长度是固定的,那么这么办,这时候集合便应运而生了。
二,集合是什么?
java集合类存放在java.util包中,是用来存放对象的容器
注意!
1,集合只能存放对象,就算集合中存储的是基本数据类型也是装换成自己相对应的类
2,集合存放都是对象的引用,并非是对象的本身,对象的本身还是存放在堆中
3,集合可以存放不限数量,不同类型的数据类型
三,Collection介绍
Collection是所有集合的根节点,Collection 表示一组对象,这些对象也称为 collection 的元素,一些Collection允许有重复的元素,一些则不允许;一些是有序的,一些Collection则是无序的。
由于不同的需求,不同的集合类就有不同的存储结构
目前对于Collection的学习目的:
1,怎么去用Collection
2,Collection的底层结构
四,Collection的一些方法
add(E e)方法,这个E表示的是泛型,泛型就是未知的数据类型,就是所有的引用类型都可以,也是由调用者自己决定数据类型。此方法如果返回true代表添加成功,返回false代表添加失败
public static void main(String[] args) {
Collection c1 =new ArrayList();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add(10);
c1.add("哈哈");
c1.add(new Object());
c1.add(new int [4]);
System.out.println(c1);
//打印的结果[10, 哈哈, java.lang.Object@15db9742, [I@6d06d69c]
上面的调用没有指定数据类型,为了我们后期进行统一的管理,方便后期的调用,我们可以将数据类型进行统一
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
System.out.println(c1);
//[你好, 哈哈, 非常好, 很好]
addAll()方法,将当前指定Collection中的所有元素添加到此Collection中,相当于两个集合的并集
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
Collection<String> c2 =new ArrayList<String>();
c2.add("非常好2");
c2.add("很好1");
c1.addAll(c2);
System.out.println(c1);
}
clear()方法标志清空集合
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
System.out.println(c1);//[你好, 哈哈, 非常好, 很好]
c1.clear();
System.out.println(c1);//[]
contains()方法
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
//如果此 collection 包含指定的元素,则返回 true
System.out.println(c1.contains("你好"));//true
containsAll()方法,如果此Collection包含指定Collection中的所有元素,则返回true,判断两个集合之间是否是子集的关系
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
Collection<String> c2 =new ArrayList<String>();
c2.add("你好");
c2.add("哈哈");
c2.add("非常好");
c2.add("很好");
System.out.println(c1.containsAll(c2));
equals()方法,判断集合是否相等,主要比较的是元素
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
Collection<String> c2 =new ArrayList<String>();
c2.add("你好");
c2.add("哈哈");
c2.add("非常好");
c2.add("很好");
System.out.println(c1.equals(c2));
hashCode()返回此集合的哈希吗值
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
System.out.println(c1.hashCode());
isEmpty()判断集合是否为空,不为空返回false ,为空返回true
remove()删除元素,删除成功,返回true,删除失败,返回false
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
System.out.println(c1);
System.out.println(c1.remove("你好"));
System.out.println(c1);
retainAll()求两个集合的交集
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
Collection<String> c2 =new ArrayList<String>();
c2.add("你好");
c2.add("哈哈");
System.out.println(c1.retainAll(c2));
System.out.println(c1);
size()返回此Collection中的元素个数
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
System.out.println(c1.size());
toArray()将集合中的所有的元素以数组形式是返回
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
System.out.println(Arrays.toString(c1.toArray()));
}
}
iterator()返回此Collection的元素上进行迭代的迭代器
public static void main(String[] args) {
Collection<String> c1 =new ArrayList<String>();//父类引用指向子类对象叫做多态
//实现add()方法
c1.add("你好");
c1.add("哈哈");
c1.add("非常好");
c1.add("很好");
Iterator<String> it =c1.iterator();
for(String str:c1) {
while(it.hasNext()) {
System.out.println(it.next());
}
}
二叉树中序遍历的原理图