package com.ujiuye.demos;
import java.util.ArrayList;
import java.util.LinkedList;
public class Demo_9 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();
ll.addFirst("hello");
ll.addFirst("java");
ll.addFirst("php");
System.out.println(ll);
ll.addLast("C");
ll.addLast("GO");
System.out.println(ll);
ll.removeFirst();
ll.removeLast();
System.out.println(ll);
System.out.println(ll.getFirst());
System.out.println(ll.getLast());
}
}
ArrayList和LinkedList在查詢或者增删元素時的效率比較(在頭部)
package com.ujiuye.demos;
import java.util.ArrayList;
import java.util.LinkedList;
public class Demo_10 {
final static int NUM = 99999;
// ArrayList和LinkedList在查詢或者增删元素時的效率比較(在頭部)
public static void main(String[] args) {
linkedListFind();
}
// LinkedList查詢元素
public static void linkedListFind() {
LinkedList alist = new LinkedList();
for (int i = 0; i < NUM; i++) {
alist.addFirst(i);
}
long start = System.currentTimeMillis();
for (int i = 0; i < alist.size(); i++) {
alist.get(i);
}
long end = System.currentTimeMillis();
System.out.println("LinkedList查詢元素的時間:" + (end - start));
}
// // ArrayList查詢元素
public static void arrayListFind() {
// 添加元素
ArrayList alist = new ArrayList();
for (int i = 0; i < NUM; i++) {
alist.add(i);
}
// =========================
long start = System.currentTimeMillis();
for (int i = 0; i < alist.size(); i++) {
alist.get(i);
}
long end = System.currentTimeMillis();
System.out.println("ArrayList查詢元素的時間:" + (end - start));
}
// ArrayList在頭部添加元素
public static void arrayListAdd() {
long start = System.currentTimeMillis();
ArrayList alist = new ArrayList();
for (int i = 0; i < NUM; i++) {
alist.add(0, i);
}
long end = System.currentTimeMillis();
System.out.println("ArrayList添加元素的時間:" + (end - start));
}
// LinkedList在頭部添加元素
public static void linkedListAdd() {
long start = System.currentTimeMillis();
LinkedList alist = new LinkedList();
for (int i = 0; i < NUM; i++) {
alist.addFirst(i);
}
long end = System.currentTimeMillis();
System.out.println("LinkedList添加元素的時間:" + (end - start));
}
// // ArrayList在頭部删除元素
public static void arrayListDel() {
// 添加元素
ArrayList alist = new ArrayList();
for (int i = 0; i < NUM; i++) {
alist.add(i);
}
// =========================
long start = System.currentTimeMillis();
while (!alist.isEmpty()) {
alist.remove(0);
}
long end = System.currentTimeMillis();
System.out.println("ArrayList删除元素的時間:" + (end - start));
}
// LinkedList在頭部删除元素
public static void linkedListDel() {
LinkedList alist = new LinkedList();
for (int i = 0; i < NUM; i++) {
alist.addFirst(i);
}
long start = System.currentTimeMillis();
while (!alist.isEmpty()) {
alist.removeFirst();
}
long end = System.currentTimeMillis();
System.out.println("LinkedList删除元素的時間:" + (end - start));
}
}
1、使用泛型的時候,沒有使用具體的泛型聲明T,而是使用了和聲明的某個泛型T有關的一類類型,就稱為泛型的通配符
三種形式
2、第一種形式,使用?來表示可以是任意的類型
removeAll(Collection<?> c) 表示可以接受任意泛型類型的集合c
作為該方法的參數,參數集合的泛型可以和調用者集合泛型E沒有任何關系
3、第二種形式,使用? extends E來表示某個泛型類型或是該泛型類型的子類
addAll(Collection<? extends E> c) 表示的是參數集合c中的泛型,必須是調用者集合泛型E的子類類型或者是本類類型,作為該方法的參數
4、第三種形式:使用?super E來表示必須是某個泛型類型或者是該泛型類型的父類類型
Arrays工具類中排序方法sort(T[] t,Comparator<? super T> c)
T就是該方法的泛型,T表示的就是數組中元素的類型<? super T>,表示的是可以接受泛型的類型必須是T類型或者是T類型的父類類型
package com.ujiuye.demos;
import java.util.ArrayList;
import java.util.Collection;
public class Demo_14 {
public static void main(String[] args) {
// 泛型的通配符
Collection<CharSequence> coll1 = new ArrayList<CharSequence>();
coll1.add("java");
coll1.add("C");
coll1.add("python");
coll1.add("go");
System.out.println(coll1);
Collection<Integer> coll2 = new ArrayList<>();
coll2.add(123);
coll2.add(234);
coll2.add(554);
// removeAll(Collection<?> c) ?表示可以接受任意泛型類型的集合c
// 作為該方法的參數,參數集合的泛型可以和調用者集合泛型E沒有任何關系
coll1.removeAll(coll2);
System.out.println(coll1);
// addAll(Collection<? extends E> c) 表示的是參數集合c中的泛型,必須是調用者集合泛型E的子類類型或者是本類類型,作為該方法的參數
// coll1.addAll(coll2);//
Collection<String> coll3 = new ArrayList<>();
coll3.add("123");
coll3.add("as");
coll3.add("asdf");
coll1.addAll(coll3);
//
}
}