1(1张图)1(1个类Collections)3()6(6个接口)
位于java.util包中
1. 由来:
常量 变量 数组--char[] ={'h','e','l'} -- String
致命点:长度固定,类型固定
由此给出了数组的改进----可变数组
容器:只能存储对象 (基本类型不能存储到容器中-----可以转化成包装类对象存储)
Map |
collection |
2. 一张图
3.Collection
存的是单个!!对象!!
有序list:有序可以重复
无序set: 无序不可以重复
3.1 Collection 接口的方法
接口,没法直接看到源代码,看实现类的源代码
3.1.1 collection 方法
3.1.1.1 添加 void add(Object element)
import java.util.*;
public class Test{
public static void main(String[] args) {
// 父变量指向子类对象
Collection c = new ArrayList();
c.add(123); // 自动装箱
c.add(true); // 自动装箱
c.add("Hello");
System.out.println(c.size()); // 3
System.out.println(c) // [123,true,Hello]
// ArrayList 重写了toString()的返回值
}
}
3.1.1.2 移除 boolean remove(Object element)
------ 有一种是否相同的比较 -------重写equals()
import java.util.*;
public class Test{
public static void main(String[] args) {
// 父变量指向子类对象
Collection c = new ArrayList();
c.add(123); // 自动装箱
c.add(true); // 自动装箱
c.add("Hello");
c.add(new Person(101,"张三"));
c.remove(123);
c.remove(new Person(101,"张三"));
System.out.println(c.size()); // 3
System.out.println(c) // [true,Hello, Person@....]
// new Person(101,"张三")并没有移除掉~!!!!
class Person {
private int id;
private String name;
public Person(int id,String name) {
this.id = id;
this.name = name;
}
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
if (this.id == id) {
return true;
}
}
return false;
}
}
}
3.1.1.3 是否包含 boolean contains(Object element)
------- 有一种是否相同的比较-----重写equals()
import java.util.*;
public class Test{
public static void main(String[] args) {
// 父变量指向子类对象
Collection c = new ArrayList();
c.add(123); // 自动装箱
c.add(true); // 自动装箱
c.add("Hello");
c.add(new Person(101,"张三"));
System.out.println(c.contains(123)); // true
System.out.println(c.contains("hello")); // true
System.out.println(c.contains(new Person(101,"张三")); flase
//拿着我需要判断的对象和容器中的对象挨个比较,其实是equals()
}
}
3.1.1.4 遍历容器接口:Iterator iterator()
Iterator 接口定义了3个方法:
boolean hasNext() 判断游标当前位置的后面是否还有元素 返回true 否则返回false
Object next() 获取游标右侧的元素,游标再次右移
void remove()
Iterator对象的 remove方法是在迭代过程中删除元素的唯一安全的方法
iterator()方法,返回一个对象,而对象必定属于某个类,需要定义一个变量来指向它
在的问题是:这个类 叫什么我们不知道,但我们知道这个类实现了Iterator 接口
terator iter = c.iterator() 父变量指向子类对象
把iter理解成一份指针/游标,最初指向容器第一个元素之前的位置
也就是说iter 变量指向的对象重写了这三个方法
public class Test {
public static void main(String[] args) {
m2();
}
public static void m2() {
Collection c = new ArrayList();
c.add(123);
c.add("hello");
c.add(true);
Iterator iter = c.iterator();
while (iter.hasNest()) {
Object obj = iter.next();
System.out.println(obj);
}
}
public static void m3() {
Collection c = new ArrayList();
c.add(123);
c.add("hello");
c.add(true);
for (Iterator iterator=c.iterator();iterator.haxNext();) {
Object obj = iterator.next();
System.out.println(obj);
}
}