容器里面可以装对象,容器本身也是对象。
容器4大主要接口:
1、collection函数库是在java.util包下的一些接口和类,类是用来产生对象存放数据用的,而接口是访问数据的方式(collection是list和set的父类)。
接口collection表示一组对象。collection的容量可以自动调节,但只能用来存放对象。存放在collection数据库中的数据称为元素。
2、list中可以装相同的对象,也就是说同一个对象可以重复装(有顺序可以重复)。所以list中的元素都有下标,而其他类中的元素没有下标一说。
ArrayList是list的一个子类其底层实现是通过数组实现,所以根据下标查找快但是增删慢。
LinkedList也是list的一个子类其底层实现是同过双向循环链表实现的所以查询慢但是增删快。
list的使用:
package collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
List list = new LinkedList();
List s1 = new LinkedList();
list.add("aaa");
list.add(1234);
System.out.println(list.size());
System.out.println(list.get(0));
list.remove("aaa");
System.out.println(list.size());
System.out.println(list.get(0));
list.set(0, "asdf"); //该方法会用“asdf”代替1234;
list.add(1, "zxc"); /*该方法会在下标为一的地方加上“zxc”如果之前下标为一的地方有元素那么
* ,之前下标为一的元素和之后的元素下标都会加一。*/
System.out.println(list.get(0));
list.remove(0);
System.out.println(list.get(0));
}
}
3、set里面装的对象不能重复(对象的值不能重复(内部用的equals比较的,虽然编译不报错,但是无论你装多少个相同的值得对象size不会变)),装入的对象无序(主要用的是Hashset)。
代码如下:
package collection;
import java.util.HashSet;
import java.util.Set;
public class TestSet {
public static void main(String[] args) {
Set set = new HashSet();
set.add("aaa");
set.add("bbb");
set.add("aaa");
System.out.println(set.size());
set.add(new String("asdf"));
System.out.println(set.size());
set.clear();
System.out.println(set.size());
}
}
该处第一次打印出的size为2,第二次打印出的size为3,第三次打印出的size为0
4、map键——值对,通过一个对象找另一个对象(通过键找到值)。
底层实现(数组加链表:在一个数组中每个键——值对都对应一个唯一的值(键不能重复,如果重复了后面添加的键的值会覆盖前一个值(唯一性)),将该值和某个固定的数取余得到一个数,该数就是数组的下标,当某几个键——值对各自所对应的值取余的得数相同时,以链表的方式一个个地链接起来,以后查找的时候就找数组对应下表下的链表,然后再在链表中查找所要查找的键——值对)。
map的使用:
package collection;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
Map map = new HashMap();
map.put("asdf", new Wife("mylove"));
Wife i = (Wife)map.get("asdf");
map.put(123, new Wife("lover"));
Wife w = (Wife)map.get(123);
System.out.println(i.name);
System.out.println(w.name);
}
}
class Wife {
String name;
public Wife(String name) {
this.name = name;
}
}
通过关键字“asdf”或123找对应的值(map中还有很多方法我就不一一列举了,想看可以参考官方给出的API文件)。
接口里面可以定义:抽象方法和常量。(定义规范)实现类就必须实现接口中的抽象方法。