集合之概述
1.概述
- 数组长度是固定,如果要改变数组的长度需要创建新的数组将旧数组里面的元素拷贝过去
- java给开发者提供了一些集合类,能够存储任意长度的对象,长度可以随着元素的增加而增加,随着元素的减少而减少,使用起来方便一些。
- 总接口:Collection
- 分接口:List、Queue、Set
- List:ArrayList、LinkedList、Vector (有序,存和取都有序,数据能重复)
- Set:HashSet、TreeSet (无序,数据不能重复)
- Queue:PriorityQueue (队列,先进先出,数据能重复)
2.数组和集合的区别
- 数组中既可以存储基本数据类型,又可以存放引用数据类型
- 集合中只能存放应用数据类型,存储基本数据类型时,会自动装箱变成相应的包装类)
- 数组的长度是固定的
- 集合中的长度是动态的,可以随时增加
3.Collection中的常用方法
boolean add(E e);
boolean remove(Object o);
void clear();
boolean isEmpty();
boolean contains(Object o);
4.将String型存储到集合中
//使用集合存储String型
Collection c=new ArrayList();
c.add("a");
c.add("b");
c.add("c");
//获取元素的个数
System.out.println(c.size());
//移除某个元素
c.remove("c");
Object []o=c.toArray();
for(int i=0;i<o.length;i++) {
System.out.println(o[i]);
}
//判断集合是否为空
System.out.println(c.isEmpty());
//判断集合是否存在某个元素
System.out.println(c.contains("c"));
//清空集合
c.clear();
System.out.print(c.size());
5.自定义引用类存储到集合中
自定义类
public class TestTwo {
private String name;
private int 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;
}
public TestTwo() {
}
public TestTwo(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "TestTwo [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if (obj instanceof TestTwo) {
TestTwo t=(TestTwo)obj;
if(this.name.equals(t.getName())&&this.age==t.getAge()) {
return true;
}
}
return false;
}
进行测试
public static void main(String[] args) {
//使用集合存储String型
Collection c=new ArrayList();
c.add(new TestTwo("Sun",12));
c.add(new TestTwo("Winter",24));
c.add(new TestTwo("Spring",12));
//获取元素的个数
System.out.println(c.size());
//移除某个元素
c.remove(new TestTwo("Sun",12));
//将集合变成数组进行遍历
Object [] o=c.toArray();
for(int i=0;i<o.length;i++) {
System.out.println(o[i]);
}
//判断集合是否为空
System.out.println(c.isEmpty());
//判断集合是否存在某个元素
System.out.println(c.contains(new TestTwo("Sum",12)));
//清空集合
c.clear();
System.out.print(c.size());
}
6.All方法
- retainAll()
取交集,如果c1里面的元素全部包含在两者的交集里面,返回false,否则返回true
//所有的All方法啊
Collection c1=new ArrayList();
c1.add("a");
Collection c2=new ArrayList();
c2.add("a");
c2.add("b");
boolean a=c2.retainAll(c1);
System.out.print(a);
- removeAll();
删除交集
//所有的All方法啊
Collection c1=new ArrayList();
c1.add("a");
Collection c2=new ArrayList();
c2.add("a");
c2.add("b");
c2.removeAll(c1);
System.out.print(c2);
- addAll();
两个集合结合
//所有的All方法啊
Collection c1=new ArrayList();
c1.add("a");
Collection c2=new ArrayList();
c2.add("a");
c2.add("b");
c2.addAll(c1);
System.out.print(c2);
- containAll();
判断c1里面的元素是否包含c2的全部内容
//所有的All方法啊
Collection c1=new ArrayList();
c1.add("a");
Collection c2=new ArrayList();
c2.add("a");
c2.add("b");
boolean a=c2.containsAll(c1);
System.out.print(a);