集合,那真是用到的比见到的要多,其实不深刻了解也没多少要记住的,毕竟一搜一大堆,cv就好了。
- A:集合的由来
数组长度是固定,当添加的元素 超过了数组的长度 时需要对数组重新定义,太麻烦 ,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少 - B:数组和集合的区别
- 区别1 :
- 数组既可以存储基本数据类型,又可以存储引用数据类型基本数据类型存储的是值,引用数据类型存储的是地址值
- 集合只能存储引用数据类型(对象), 集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
- 区别2:
- 数组长度是固定的,不能自动增长
- 集合的长度的是可变的,可以根据元素的增加而增长,
- 区别1 :
- C:数组和集合什么时候用
- 1,如果元素个数是固定的推荐用数组 (上来就创建好了,用起来比较效率。)
- 2,如果元素个数不是固定的推荐用集合(添加数据的时候,每次增加1.5倍容量。)
所属集合的例子也有很多,穷举不完的,点一些就好了。
aimport java.util.ArrayList;
import java.util.Collection;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class Demo1_Collection {
/**
* A:注意:
*
collectionXxx.java使用了未经检查或不安全的操作(Editplus中).
注意:要了解详细信息,请使用 -Xlint:unchecked重新编译.
java编译器认为该程序存在安全隐患
温馨提示:这不是编译失败,所以先不用理会,等学了泛型你就知道了
add方法如果是List集合一直都返回true,因为List集合中是可以存储重复元素的
如果是Set集合当存储重复元素的时候,就会返回false
ArrayList的父类的父类重写toString方法,所以在打印对象的引用的时候,输出的结果不是Object类中toString的结果
*/
public static void main(String[] args) {
//demo1();
demo2();
}
private static void demo2() {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
//c.remove("b"); //删除指定元素
//c.clear(); //清空集合
//System.out.println(c.contains("b")); //判断是否包含
//System.out.println(c.isEmpty());
System.out.println(c.size()); //获取元素的个数
System.out.println(c);
}
public static void demo1() {
//因为没有出现泛型,所以下面会出现黄线
Collection c = new ArrayList(); //父类引用指向子类对象
boolean b1 = c.add("abc");
boolean b2 = c.add(true); //自动装箱new Boolean(true);
boolean b3 = c.add(100);
boolean b4 = c.add(new Student("张三",23));
boolean b5 = c.add("abc");
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
System.out.println(b5);
System.out.println(c.toString());
}
}
还有
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
都有了了,之后加上all就是交不交的问题了。
toArray()
迭代器来个例子
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo5_Iterator {
/**
* 迭代
* * A:迭代器概述
* 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
*/
public static void main(String[] args) {
demo2();
}
private static void demo2() {
Collection c = new ArrayList();
c.add(new Student("张三", 23)); //Object obj = new Student("张三",23);
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
c.add(new Student("赵六", 26));
//获取迭代器
Iterator it = c.iterator();
while(it.hasNext()) {
//System.out.println(it.next());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "..." + s.getAge());
}
}
}
- A:迭代器原理
- 迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现 ,使用者不用管怎么实现的,会用即可
- B:迭代器源码解析
- 1,在eclipse中ctrl + shift + t找到ArrayList类
- 2,ctrl+o查找iterator()方法
- 3,查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
- 4,查找Itr这个内部类,发现重写了Iterator中的所有抽象方法
好了先到这里,明天继续。
ps:每日一词
拜月星慢·月满我心寒
夜笑春风,明曦潜入,伴卷天山欲沐。向去芗林,有胡笳青绿。怯相见,抱手琵琶又是遮面,丽质流年轻付。仙试听音,早时还难诉。
醉江山、但识长安路,抬头看、却有山无数。玉媚可惜无主,尽怜惜君妒。念奴娇、大浪拍千古,非无止,还道不如故。情含瘦,一段衷肠,两心还远不。