最近在复习集合框架,总结一下Java集合框架的一些方法,还只是复习了一部分,就先总结复习了的部分吧。
一、首先,什么事集合框架?
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
(1)接口:即表示集合的
抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
(2)实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。
(3)算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是
多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。如果你学过C++,那C++中的标准模版库(STL)你应该不陌生,它是众所周知的集合框架的绝好例子。
那么集合的由来是什么?
答:数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
数组和集合的区别是什么?
答:①数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
②集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
③数组长度是固定的,不能自动增长
④集合的长度的是可变的,可以根据元素的增加而增长
而框架的发展是怎样的呢,现在的集合框架基本如下图所示:
那么,我就先总结我复习完的Collect方面的内容吧。
一、Collection的基本功能:
boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
例子如下:
先设定一个学生类:
public class Student {
private String name;
private int age;
public Student() {
super();
}
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 + "]";
}
}
然后例子1如下:
Collection c = new ArrayList(); //父类引用指向子类对象
boolean b1 = c.add("abc");
boolean b2 = c.add(true); //自动装箱new Boolean(true);
boolean b3 = c.add(100);
boolean b4 = c.add(new Student("张三",23));
boolean b5 = c.add("abc");
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
System.out.println(b5);
System.out.println(c.toString());
得出的结果如下:
例子2:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
System.out.println(c);
System.out.println(c.size()); //获取元素的个数
System.out.println(c.contains("b"));
c.remove("b"); //删除指定元素
System.out.println(c);
System.out.println(c.contains("b")); //判断是否包含
System.out.println(c.isEmpty());c.clear(); //清空集合
System.out.println(c);
System.out.println(c.isEmpty());
得出结果如下:
二、遍历集合
Collection c = new ArrayList();
c.add("first");
c.add("second");
c.add("third");
c.add("forth");
Object[] arr = c.toArray(); //将集合转换成数组
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
若存入的是一个类对象,那么怎样遍历集合呢?
Collection c = new ArrayList();
c.add(new Student("张三", 23)); //Object
obj = new Student("张三",23);
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
c.add(new Student("赵六", 26));
Object[] arr = c.toArray(); //将集合转换成数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
Student s = (Student)arr[i]; //向下转型
System.out.println(s.getName() + "..." + s.getAge());
}
结果如下:
三、Collection的All用法:
带All的功能
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
例子如下:
例子1:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
System.out.println(c1);
c1.addAll(c2); //将c2中的每一个元素添加到c1中
System.out.println(c1);
c1.add(c2); //将c2看成一个对象添加到c1中
System.out.println(c1);
得出的结果:
例子2:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("z");
boolean b = c1.removeAll(c2); //删除的是交集
System.out.println(b);
System.out.println(c1);
结果如下:
例子3:containsAll()
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
boolean a = c1.containsAll(c2);
c2.add("z");
boolean b = c1.containsAll(c2); //判断调用的集合是否包含传入的集合
System.out.println(a);
System.out.println(b);
结果如下:
true
false
例子4:
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
c2.add("e");
c2.add("f"); //取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
boolean b = c1.retainAll(c2); //取交集
System.out.println(b);
System.out.println(c1);
System.out.println(c2);
c2.retainAll(c1);
System.out.println(c2);
得出的结果是:
调用containsAll的集合会取交集,而导致c2集合会变化。
四、集合的遍历——迭代器遍历、
迭代器是什么?
答:集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
迭代器的使用:
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Iterator it = c.iterator(); //获取迭代器的引用
while(it.hasNext()) { //集合中的迭代方法(遍历)
System.out.println(it.next());
}
这里有两个方法:hasNext()和next(),分别表示是否还有下一个元素和指向下一个元素
那么,如果要遍历自定义对象的集合呢?
如下:
Collection c = new ArrayList();
c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("赵六",26));
c.add(new Student("赵六",26));
for(Iterator it = c.iterator();it.hasNext();) {
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
System.out.println("------------------------------");
Iterator it = c.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + "," + ((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
结果如下:
张三,23
李四,24
王五,25
赵六,26
-----------------------------------
张三,23
李四,24
王五,25
赵六,26
Collection的内容就差不多这样了,还有List,Set和Map的内容就复习完了再总结