package com.sqf.thread;
import java.util.ArrayList;
import java.util.Collection;
/*
集合:集合是存储对象数据的集合容器。
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。
-------| Collection 单例集合的跟接口。
----------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
----------| Set 如果是实现了Set接口的集合类,具备特点: 无序,不可重复。
Collection接口中的方法:
增加
add(E e) 添加成功返回true,添加 失败返回false.
addAll(Collection c) 把一个集合 的元素添加到另外一个集合中去。
删除
clear() 清空所有元素
remove(Object o) 移除對象
removeAll(Collection c) 刪除当前集合中,与c集合的交集
retainAll(Collection c) 保留当前集合与c的交集元素,其他的元素一并删除。
查看
size() 查看集合的元素个数
判断
isEmpty()
contains(Object o)
containsAll(Collection<?> c)
迭代
toArray()
iterator()
*/
class Person{
String name;
@Override
public String toString() { //注意重写toString方法
return name;
}
}
class Demo5{
public static void main(String[] args) {
Collection list = new ArrayList();
/*
增加
add(E e) 添加成功返回true,添加 失败返回false.
addAll(Collection c) 把一个集合 的元素添加到另外一个集合中去。
*/
//1.add()
list.add("123");
list.add("小明");
//2.addAll();
Collection list1 = new ArrayList();
Person p = new Person();
p.name = "dsada";
Person p1 = new Person();
p1.name = "dasdsa";
list1.add(p);
list1.add(p1);
list.addAll(list1);
/*
删除
clear()
remove(Object o)
removeAll(Collection c)
retainAll(Collection c)
*/
//list.clear();
//list.remove("123");//1.删除普通的对象
/*
//2.地址的對象
Person p2 = new Person();
p2.name = "dasdsa";
需要把p2指向list与中person對象的地址
*/
//list.removeAll(list1);
//list.retainAll(list1);
/*
查看 size()
*/
list.size();
/*
判断
isEmpty()
contains(Object o)
containsAll(Collection c)
*/
}
}
package com.sqf.thread;
import java.util.ArrayList;
import java.util.Collection;
/*
判断
isEmpty()
contains(Object o) 一个集合中是否包含某一个对象
containsAll(Collection c) 一个集合中是否包含另一个集合
*/
class Labour{
int id;
String name;
public Labour(int id,String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "编号:" + this.id + "姓名:" + this.name;
}
@Override
public boolean equals(Object obj) {
Labour labour = (Labour) obj;
return this.id == labour.id;
}
}
public class Demo6 {
public static void main(String[] args) {
Collection list = new ArrayList();
Labour labour = new Labour(110, "小张");
Labour labour1 = new Labour(111, "小王");
Labour labour2 = new Labour(112, "小吴");
list.add(labour);
list.add(labour1);
list.add(labour2);
System.out.println("一个集合中是否包含某一个对象?" + list.contains(new Labour(111, "小王")));
Collection list1 = new ArrayList();
list.add(labour1);
list.add(labour2);
System.out.println("一个集合中是否包含另一个集合?" + list.containsAll(list1));
//其实contains方法内部是依赖于equals方法进行比较的。需要重写equals方法
}
}
package com.sqf.thread;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
迭代
toArray()
iterator()
Iterator类
迭代器的方法:
hasNext() 问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。
next() 获取当前指针指向的元素并返回当前的元素,然后指针指向下移动一个单位
remove() 移除迭代器最后一次返回 的元素。
NoSuchElementException 没有元素的异常。
出现的原因: 没有元素可以被迭代了。。。
*/
class Computer{
int id;
String name;
public Computer(int id,String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "id:"+id + " name:" + name;
}
}
public class Demo7 {
public static void main(String[] args) {
Collection list = new ArrayList();
Computer c1 = new Computer(110, "联想");
Computer c2 = new Computer(111, "苹果");
Computer c3 = new Computer(112, "戴尔");
list.add(c1);
list.add(c2);
list.add(c3);
//1.toArray()
/*
Object[] obj = list.toArray();
for(int i=0;i<obj.length;i++){
Computer c = (Computer) obj[i];
System.out.println("编号:" + c.id + "品牌:" + c.name);
}
*/
//2.iterator()
Iterator it = list.iterator();
//返回一个迭代器 疑问:iterator()方法返回的是一个接口类型,
//为什么接口又可以调用方法可以使用呢? iterator 实际 上返回的是iterator接口的实现类对象。
while(it.hasNext()){
Computer c = (Computer) it.next();
System.out.println("编号:" + c.id + "品牌:" + c.name);
}
//it.next();
//it.remove(); //移除的为第一个元素
//System.out.println(list);
}
}