笔记
Collection:
add()
remove()
contains()
isEmpty()
size()
clear()
addAll()…
Object[] toArray()
Collection col
String[] col.toArray(String[])
iterator() - 获得迭代器
hasNext()
next()
remove()
Iterable <-- Collection(I):集合 存放多个元素,没有大小限制
List(I): ArrayList LinkedList Vector
线性结构,有序列表(顺序索引index),允许重复,带标号
顺序结构(数组):
连续空间 -> 空间浪费
带下标 -> 查找可以快速定位
插入/删除 -> 做大量的移动,效率低
链表结构(节点) : First/Last
不需要连续空间 -> 空间利用率高
不带下标 -> 查找next/prev,效率低
插入/删除 -> 改变前后节点指向,效率高
隐含操作 -> 查找
结论:总体来说ArrayList效率高
Set(I) : HashSet 散列结构 - 无序,不允许重复
SortedSet(I) -> TreeSet 树状结构 - 二叉树(中序)
HashSet存储过程
1.计算存储对象的位置,通过hashCode()值(哈希算法)
2.该位置没有元素(空),直接加入(已经加入的元素,位置不会改变)
3.该位置上有元素, 判断要加入的对象和存在的对象equals相等
4.相等 -> 相同对象,不加
5.不相等 -> 重新计算位置,重复第一步
为什么hashCode和equals方法要同时重写
删除过程?
TreeSet:二叉树
先序遍历:中左右
后序遍历:左右中
中序遍历:左中右,升序排序
Comparable -> compareTo 判断两个元素是否相等
基本数据类型包装类 + String + Date
Animal Dog Cat
Animal a = new Dog()
Dog d = (Dog)a
Animal a1 = new Cat()
Dog d1 = (Dog) a1 -> ClassCastException
Queue(I):LinkedList
队列 Deque -> LinkedList Stack
线性结构,有序,允许重复
arraylist数组-顺序结构
public class ArrayListDemo {
@Test
public void test() {
MyArrayList c= new MyArrayList();
c.add(“hello”);
c.add(“hi”);
c.add(“he”);
c.add(2,“o”);
c.add(“s”);
c.add(“f”);
c.set(4, “ff”);
System.out.println(c.remove(3));
System.out.println(c.toString());
System.out.println(c.size);
System.out.println(c.get(3));
}
}
linkedlist节点-链表结构
public class MyLinkedListDemo {
@Test
public void test() {
MyLinkedList c = new MyLinkedList();
c.add(“hi”);
c.add(“he”);
c.add(“hello”);
c.add(“a”);
c.add(“b”);
c.add(“c”);
c.add(3, “ok”);
c.set(2, “qwe”);
c.clear();
System.out.println(c.get(5));
System.out.println(c.remove(3));
System.out.println©;
}
}
队列 Queue
public class QueueDemo {
@Test
public void test01() {//队列(先进先出)
Queue q = new LinkedList();
//向队列末尾追加元素
q.offer("haha");
q.offer("lucy");
q.offer("heihei");
//从队列头取元素,出队列
String s = q.poll();//poll方法
System.out.println(s);
//从队列头取元素,不出队列
String str = q.peek();//peek方法
System.out.println(str);
}
@Test
public void test02() {//双端队列(两头进两头出)
Deque dq = new LinkedList() ;
dq.offerFirst("haha");//offerFirst方法
dq.offerFirst("heihei");
dq.offerLast("heng");//offerLast方法
System.out.println(dq);
}
@Test
public void test03() {//栈(后入先出)
//Deque 栈 push:压栈 pop:弹栈
Deque dq = new LinkedList() ;
dq.push("lucy");//压栈放入
dq.push("tom");
dq.push("jack");
//List list = new Stark();
System.out.println(dq);
System.out.println(dq.pop());//pop弹栈,元素带走
System.out.println(dq);
}
SET
public class SetDemo {//set 存储过程,随机储存 hash值!
@Test
public void test01() {
Set set = new HashSet();
set.add("he");
set.add("hi");
set.add("heihei");
set.add("lucy");
set.add("haha");
set.add("hi");
System.out.println(set.size());
System.out.println(set);
}
@Test
public void test02() {
Set set = new HashSet();
User u1 = new User("lucy",18);
User u2 = new User("jerry",18);
set.add(u1);
set.add(u2);
set.add(new User("lucy",18));
set.add(new User("tom",18));
set.add(new User("jane",19));
System.out.println(u1.equals(u2));
System.out.println(set.size());
Iterator it = set.iterator();//1.获得迭代器
while(it.hasNext()) {//hasNext 是否有下个元素
User str = it.next();//下一个元素
if(str.name.equals("tom")) {
it.remove();//迭代删除
}
System.out.println(str.name);
}
}
@Test
public void test03() {
Set set = new TreeSet();
set.add(3);
set.add(4);
set.add(7);
set.add(5);
System.out.println(set);
}
@Test
public void test04() {
Set set = new TreeSet();
set.add("jerry");
set.add("Lucy");
set.add("lucy");
set.add("tom");
System.out.println(set);
}
@Test
public void test06() {
Set set = new TreeSet();
set.add(new User("jerry",20));
set.add(new User("tom",18));
set.add(new User("lucy",13));
set.add(new User("jane",6));
System.out.println(set);
}
@Test
public void test07() {
//User 必须是可比较的 Comparable 需要在User继承Comparable才可以运行。
TreeSet set = new TreeSet();
set.add(new User("lucy",20));
set.add(new User("tom",18));
System.out.println(set);
}
@Test
public void test08() {
//初始化TreeSet时候,可以指定比较器
TreeSetset = new TreeSet(new Comparator() {
@Override
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
return o1.getAge()-o2.getAge();
}
});
set.add(new User("lucy",20));
set.add(new User("tom",18));
System.out.println(set);
}
}