集合
Collection接口:
set接口(没有顺序,不能相互equals,不允许重复):
*HashSet---实现类(以哈希码表为底层实现机制的类);
TreeSet---实现类(以二叉树*为底层实现机制的类);
Set接口的方法没有自己定义的,全部继承自Collection接口;
list接口(有顺序,可以重复):
*ArryList---实现类(以数组为底层实现机制的类);
查询速度快,但增删改的效率低;
LinkedLis---实现类(以链表为底层实现机制的类);
查询速度慢,但增删改的效率高;
写法:
Collection c = new ArryList();
直接写父类接口;
好处:
可以直接调用父类的所有方法,易维护;
add()方法里只能传Object对象;
remove()方法:
通过判断两个对象是否相互aquals来确定是否该删除该对象,自定义的类需要重写父类的equals方法和HashCode方法;
hashCode通常用来做索引, 一个对象通过它的hashCode的值可以找到它在内存中的地址,
所以两个对象如果equals了, 而且又要作为索引的情况下, hashCode的值必须相等;
二叉树:
二叉树是每个结点最多有两个子树的树结构。
通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
二叉树常被用于实现二叉查找树和二叉堆。
List接口常有的方法:
get(int index);传索引从0开始;
set(int , Object)把一个索引上的值替换成传的值,有一个返回值要注意 !;
add(Object)添加一个值;
remove(int index)删除索引上的值
remove(Object)删除值
indexOf(Object)返回索引对象第一次出现的索引;
lastIndexOf(Object)返回索引对象最后一次出现的索引;
retainAll(Collection)----返回一个boolean值,
当list的内容被改变的时候返回true, 否则返回false
List l1 = new ArrayList<>(); l1.add("a"); l1.add("c"); l1.add("d"); l1.add("e"); l1.add("c"); l1.add("d"); List l2 = new ArrayList<>(); l2.add("b"); l2.add("b"); l2.add("b"); l2.add("b"); l2.add("c"); l2.add("d"); List l3 = new ArrayList<>(); l3.add("b"); l3.add("b"); l3.add("b"); l3.add("b"); l3.add("b"); l3.add("b"); boolean b1 = l1.removeAll(l2); boolean b2 = l1.removeAll(l3); System.out.println(b1); System.out.println(b2); System.out.println(l1); System.out.println(l2); System.out.println(l3); //第一个打印true, //第二个打印falose, //第三个打印[a, e], //第四个打印[b, b, b, b, c, d] //第五个打印[b, b, b, b, b, b]