Java集合之Collection接口
1.为什么会有集合?
针对数组中的一些缺陷而设计的集合
1.数组的长度一经确定无法更改
2.数组中数组元素增加、修改、删除方法没有,导致效率过低
3.数组中没有返回数组元素个数的方法
4.数组是有序的、可重复的,无法解决无序、不可重复的问题
2.Collection作为set、list顶级接口,下面将介绍一些常用的方法
1.add(Object obj):添加obj元素
@Test
public void test1() {
// 1.add(Object obj)
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
System.out.println(coll);
}
2.addAll(Collection c):添加集合c
@Test
public void test1() {
//2.addAll(Collection c)
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
Collection c1=new ArrayList();
c1.add(456);
c1.add("def");
coll.addAll(c1);
System.out.println(coll);
}
3.equals(Objdect o):比较两个对象是否相等
//2.addAll(Collection c)
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
Collection c1=new ArrayList();
c1.add(456);
c1.add("def");
coll.addAll(c1);
System.out.println(coll);
//3.equals(Objcet o):比较两个对象的内容是否相等
Collection c2=new ArrayList();
c2.addAll(coll);
System.out.println(c2.equals(coll));
4.isEmpty():判断是否为空,是返回true
//2.addAll(Collection c)
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
Collection c1=new ArrayList();
c1.add(456);
c1.add("def");
coll.addAll(c1);
System.out.println(coll);
//3.equals(Objcet o):比较两个对象的内容是否相等
Collection c2=new ArrayList();
c2.addAll(coll);
System.out.println(c2.equals(coll));
//4.isEmpty():判断是否为空,为空返回true
System.out.println(c2.isEmpty());
5.hashCode():返回一个哈希值
//2.addAll(Collection c)
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
Collection c1=new ArrayList();
c1.add(456);
c1.add("def");
coll.addAll(c1);
System.out.println(coll);
//3.equals(Objcet o):比较两个对象的内容是否相等
Collection c2=new ArrayList();
c2.addAll(coll);
System.out.println(c2.equals(coll));
//4.isEmpty():判断是否为空,为空返回true
System.out.println(c2.isEmpty());
//5.hashCode():返回一个hashCode编码
System.out.println(c2.hashCode());
6.contains(Object o):是否包含o,是返回true
@Test
public void test2() {
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
// contains(Object o):使用当前的类的equals方法比较是否包含
System.out.println(coll.contains(123)); //使用包装类Integer中重写的equals方法进行比较
coll.add(new Student("小明",18));
System.out.println(coll.contains(new Student("小明",18)));//自定义类重写equals方法之 后为true,否则为false
coll.add(new Animal("cat",3));
System.out.println(coll.contains(new Animal("cat",3)));
class Animal{
private String name;
private int age;
public Animal(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Animal [name=" + name + ", age=" + age + "]";
}
}
class Student{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
// @Override
// public int hashCode() {
// return Objects.hash(age, name);
// }
@Override
public boolean equals(Object obj) {
System.out.println("使用了Student类中的equals方法");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
return age == other.age && Objects.equals(name, other.name);
}
}
7.containsAll(Collection c):是否含有集合c,同样使用当前类的equals方法进行判断
//containsAll(Collection c):含有c返回true
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
Collection c1=new ArrayList();
c1.add(123);
c1.add("abc");
System.out.println(coll.containsAll(c1));
Collection c2=new ArrayList();
c2.add(123);
c2.add("abc");
c2.add(new Student("小明",18));
System.out.println(coll.containsAll(c2));
coll.add(new Student("小明",18));
System.out.println(coll.containsAll(c2));
8.remove(Objcet o):删除对象o,调用当前类的equals方法进行判断
@Test
public void test4() {
//remove(Objcet o):删除对象o
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.remove(123); //同样,调用了Integer中的equals方法进行判断
System.out.println(coll);
coll.add(new Student("小明",18));
System.out.println(coll);
coll.remove(new Student("小明",18));
System.out.println(coll); //调用Student类中的equals方法进行判断
coll.add(new Animal("Cat",3));
System.out.println(coll);
coll.remove(new Animal("Cat",3));
System.out.println(coll);
}
9.removeAll(Collection c):删除集合c,同样调用当前类的equals的方法进行判断
@Test
public void test4() {
//removeAll(Objcet o)
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
Collection c1=new ArrayList();
c1.add(123);
c1.add("abc");
c1.add(new Student("小明",18));
coll.removeAll(c1);
System.out.println(coll);
System.out.println("******************");
Collection c2=new ArrayList();
c2.add(123);
c2.add("abc");
c2.add(new Animal("Cat",3));
Collection c3=new ArrayList();
c3.add(123);
c3.add("abc");
c3.add(new Animal("Cat",3));
c2.removeAll(c3);
System.out.println(c2);
}
10.retainAll(Collection c):保留与c的交集
@Test
public void test5() {
// retainAll(Collection c):
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
Collection c1=new ArrayList();
c1.add(123);
coll.retainAll(c1);
System.out.println(coll);
}
11.size():返回实际添加元素的个数
@Test
public void test5() {
// retainAll(Collection c):
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
Collection c1=new ArrayList();
c1.add(123);
coll.retainAll(c1);
System.out.println(coll);
//size()
System.out.println(coll.size());
}
12.toArray():将Collection转化为数组
@Test
public void test6() {
//toArray():Collection -> Array
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
Object [] o=coll.toArray();
System.out.println(Arrays.toString(o));
//asList(): Array -> Collection
List<Object> list=Arrays.asList(o);
System.out.println(list);
}
13.clear():删除所有元素
@Test
public void test6() {
//toArray():Collection -> Array
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
Object [] o=coll.toArray();
System.out.println(Arrays.toString(o));
//asList(): Array -> Collection
List<Object> list=Arrays.asList(o);
System.out.println(list);
//clear():删除所有元素
list.clear();
System.out.println(list);
}
14.使用迭代器进行集合的遍历
@Test
public void test7() {
// 使用Iterator迭代器进行集合的遍历
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
Iterator iterator=coll.iterator();
//Iterator中有两个方法:1.hasNext():判断下个元素是否存在 2.next():返回下一个元素
while(iterator.hasNext()) {
System.out.print(iterator.next()+"\t");
}
Iterator iterator1=coll.iterator();
while(iterator1.hasNext()) {
Object o=iterator1.next();
if("abc".equals(o)) {
iterator1.remove(); //remove方法删除次元素
}
}
System.out.println();
Iterator iterator2=coll.iterator();
while(iterator2.hasNext()) {
System.out.print(iterator2.next()+"\t");
}
}
如果Iterator中的remove()方法放在了 :next()方法前面 或者 重复使用了都会报错
while(iterator1.hasNext()) {
iterator1.remove();
Object o=iterator1.next();
if("abc".equals(o)) {
iterator1.remove();
iterator1.remove();
}
}
15.foreach:增强for循环
@Test
public void test8() {
//foreach 增强for循环
Collection coll=new ArrayList();
coll.add(123);
coll.add("abc");
coll.add(new Student("小明",18));
for(Object o:coll) {
System.out.print(o+"\t");
}
}