Java语法Collection
读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。
Collection由来
/*
* 集合:
* 由于我们使用的是面向对象语言,所以,我们要经常使用对象。而很多时候,我们可能需要使用很的对象,
* 这个时候,我们就只能使用以前讲过的数组进行存储了,而数组的特点是长度固定。
* 这样的话就不适合变化的数据。所 以,java重新提供了一种容器,用于存储对象,这种容器叫集合。
*
* 集合的特点:
* A:长度是可以发生改变的。
* B:集合只能存储对象。
*
* 集合和数组的区别?
* 数组:
* 数组长度固定。
* 数组可以存储基本数据类型,也可以存储引用类型。
* 数组存储的数据类型是一致的。
* 集合:
* 集合长度可变。
* 集合只能存储引用类型。
* 集合可以存储不同类型的对象。
*
* 我们的集合这种容器,由于数据结构不同,所以,java就对应的提供了很多种集合类,供我们使用。
*
* 数据结构:就是数据的组织(存储)方式。
*
* Collection中应该有什么功能
* A:添加功能
* boolean add(Object obj):向集合中添加一个元素
* boolean addAll(Collection c):向集合中添加一个集合的元素。
* B:删除功能
* void clear():删除集合中的所有元素。
* boolean remove(Object obj):从集合中删除指定的元素
* boolean removeAll(Collection c):从集合中删除一个指定的集合元素。
* C:判断功能
* boolean isEmpty():判断集合是否为空。
* boolean contains(Object obj):判断集合中是否存在指定的元素。
* boolean containsAll(Collection c):判断集合中是否存在指定的一个集合中的元素。
* D:遍历功能
* Iterator iterator():就是用来获取集合中每一个元素。
* E:长度功能
* int size():获取集合中的元素个数
* F:交集功能
* boolean retainAll(Collection c):判断两个集合中是否有相同的元素。???
* G:把集合转换成数组
* Object[] toArray():把集合变成数组。
*/
Collection代码测试
public class CollectionDemo {
public static void main(String[] args) {
// 创建对象
// Collection c = new Collection();//接口不能被实例化
Collection c = new ArrayList();//多态的特点:编译时期看左边父类方法,运行时期使用右边的子类方法
// 添加元素
// boolean add(Object obj):一个是添加,一个是返回添加是否成功。
// System.out.println(c.add("hello"));
// c.add("world");
c.add("hello");
c.add("world");
c.add("java");
// 删除功能
// void clear():删除集合中的所有元素。
// c.clear();
// boolean remove(Object obj)// 删除某个元素
// System.out.println("remove:"+c.remove("world"));
// System.out.println("remove:"+c.remove("wor"));
// 判断功能
// boolean isEmpty()
// System.out.println("isEmpty:"+c.isEmpty());
// boolean contains(Object obj)
// System.out.println("contains:" + c.contains("world"));
// System.out.println("contains:" + c.contains("wor"));
// 长度功能
// int size()
System.out.println("size:" + c.size());
System.out.println("c:" + c);
}
}
Iterator(迭代器)详解
/*
* Iterator iterator():就是用来获取集合中每一个元素。
*
* 成员方法:
* Object next():获取元素,并自动移动到下一个位置等待获取。
* boolean hasNext():判断迭代器中是否还有元素。
*
* NoSuchElementException:没有这样的元素异常。你已经获取到元素末尾了,你还要获取,已经没有元素了。所以报错了。
*/
Iterator(迭代器)代码测试
public class IteratorDemo {
public static void main(String[] args) {
// 创建对象
Collection c = new ArrayList();
// 添加元素
c.add("hello");
c.add("world");
c.add("java");
// 方式1 把集合转为数组,通过for循环遍历取出数据
// Object[] objs = c.toArray();
// for (int x = 0; x < objs.length; x++) {
// String s = (String) objs[x];
// System.out.println(s);
// }
// 方式2
// Iterator iterator():就是用来获取集合中每一个元素。
// 通过集合对象获取迭代器对象
Iterator it = c.iterator();// 这是返回的是Iterator的子类对象,多态
while (it.hasNext()) {
// System.out.println(it.next());
String s = (String) it.next(); //Object转为String类型
System.out.println(s);
}
}
}
ArrayList集合中的迭代器java源代码解析
//ArrayList集合中的迭代器java源代码解析
//伪代码
public interface Iterator
{
public abstract boolean hasNext();
public abstract Object next();
}
public interface Collection
{
public abstract Iterator iterator();
}
public interface List extends Collection
{
...
}
public class ArrayList implements List
{
//1 在ArrayList中有一个iterator()方法
public Iterator iterator() {
return new Itr();
}
//ArrayList类中有一个内部类Itr实现自Iterator接口
private class Itr implements Iterator {
public boolean hasNext() {
return xxx;;
}
public E next() {
return xxx;
}
}
}
————————————————————————————————————————
用法:
//多态
Collection c = new ArrayList();
//添加元素
c.add("hello");
c.add("world");
c.add("java);
Iterator it = c.iterator(); //把Itr返回来了,而Itr实现了Iterator接口。所以,这是多态的体现。
while(it.hasNext())
{
String s = it.next();
System.out.println(s);
}