Arraylist;Linkedlist;Queue;

笔记
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);
	
}

}

你可能感兴趣的:(Java,day15)