集合之Collection
集合之Collection
常用方法
以下代码列举Collection的常用方法:
package com.javalearn.collection.collections;
import java.util.ArrayList;
import java.util.Collection;
public class TestForCollection {
public static void main(String[] args) {
Collection c = new ArrayList(); // 多态
c.add(12); // 自动装箱(java5的新特性),实际上放进去了一个对象内存地址。Integer x = new Integer(12)
c.add(true); //自动装箱
c.add(new Object());
c.add(new Student());
System.out.println("集合中元素个数是:"+c.size()); // 获取集合元素个数
c.clear(); // 清空集合
System.out.println("集合中元素个数是:"+c.size());
c.add("green");
boolean flag = c.contains("green"); // 判断是否包含元素
System.out.println(flag);
c.remove("green"); // 删除元素
System.out.println("集合中元素个数是:"+c.size());
System.out.println(c.isEmpty()); // 判断是否为空
c.add(100);
c.add("good");
Object[] obj = c.toArray(); // 集合转换为数组,使用得不多
for (int i = 0; i < obj.length; i++) {
Object o = obj[i];
System.out.println(o);
}
}
}
class Student {
}
输出结果:
集合中元素个数是:4
集合中元素个数是:0
true
集合中元素个数是:0
true
100
good
Process finished with exit code 0
迭代
以下代码使用iterator遍历Collection中的元素:
package com.javalearn.collection.iterate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestForIterate {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("abc");
c.add(100);
Iterator it = c.iterator(); // 如何使用,十分重要。最初指向第一个元素之前
while (it.hasNext()) { // 判断指针下一个位置还有没有元素
Object obj = it.next(); // 取出下一个位置的元素,不管存进去的是什么,取出来统一是object,并且指向下一位置
System.out.println(obj); // sout使obj转换为字符串
}
}
}
输出结果:
abc
100
contains方法
参数为String
以下代码对contains方法做出更详细的解释:
package com.javalearn.collection.contain;
import java.util.ArrayList;
import java.util.Collection;
public class TestForContain {
public static void main(String[] args) {
Collection c = new ArrayList();
String s1 = new String("abc");
String s2 = new String("abc");
c.add(s1);
System.out.println(c.contains(s2)); // // contains中使用了equals方法,equals原来是Object的方法,用于比较内存地址,当contains中传入的参数是String时,equals被重写,判断内容,而不是判断地址,因为String的equals方法就是判断内容,即s2.equals(数组元素)
}
}
输出结果:
true
自定义类
以下代码使用自定义类作为contains的参数,来深入理解contains:
package com.javalearn.collection.contain2;
import java.util.ArrayList;
import java.util.Collection;
public class TestForContain2 {
public static void main(String[] args) {
Collection collection = new ArrayList();
User u1 = new User("jack");
User u2 = new User("jack");
collection.add(u1);
System.out.println(collection.contains(u2)); // 调用Object的equals方法,比较内存地址
}
}
class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
}
输出内容:
false
重写了equals的自定义类
以下代码使用重写了equals的自定义类作为contains的参数:
package com.javalearn.collection.contain2;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;
public class TestForContain2 {
public static void main(String[] args) {
Collection collection = new ArrayList();
User u1 = new User("jack");
User u2 = new User("jack");
collection.add(u1);
System.out.println(collection.contains(u2)); // 调用User的equals方法,比较内存地址或比较内容
}
}
class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) { // 重写equals方法
if (o == null || !(o instanceof User))return false;
if(o == this) return true; // 比较内存地址
User u = (User)o;
return u.name.equals(this.name); // 比较name
}
}
输出结果:
true