18.集合框架

1. Collection

1.1 泛型:

  • 语义:广泛的类型

  • 代码:任意的对象类型。

  • 场景: 不用强制转换

  • 指定泛型的范围

? extends java.util.Date: 包含java.util.Date或子类

? super java.util.Date : 包含java.util.Date或父类(接口)

T : type类型 E: element元素, K: key键, V: value值

package com.etc.lesson19;

import java.util.Date;

public class TestMain3 {

	public static void main(String[] args) {
		A<String> a1 = new A<>();
		a1.setT("Hello Fanxing");
		String str = a1.getT();
		System.out.println(str);
//		Object o = a1.getT();
//		if (o instanceof String) {
//			String str = (String) o;
//			System.out.println(str);
//		}
		A<Date> a2 = new A<Date>();
		a2.setT(new Date());
		Date d2 = a2.getT();
		System.out.println(d2);
//		Object o1 = a2.getT();
//		if (o1 instanceof Date) {
//			Date str = (Date) o1;
//			System.out.println(str);
//		}
//		a2.setT(100);
//		Object o2 = a2.getT();
//		if (o2 instanceof Integer) {
//			int str3 = (int) o2;
//			System.out.println(str3);
//		}
		
		A<java.lang.Cloneable> a3 = new A<>();
		A.x(a3);
	}
}
class A<T> {
	
	private T t;

	public T getT() {
		return t;
	}

	public void setT(T t) {
		this.t = t;
	}
	public static void x(A<? super Date> a) {
		System.out.println(a);
	}
}

1.2 集合方法:

集合不用定义大小,无顺序无下标。

数组有下标。

  • boolean add(E e); 添加元素。 返回值是否添加成功
  • clear(); 清空集合元素
  • size(); 集合大小
  • Object[] toArray(): 集合转换数组
    • Arrays.asList(数组); 返回的是List
    • Collections.addAll(c, new Integer[]{1, 3, 6, 7}); 返回Collection

集合的遍历方式:

		Collection<Integer> c = new Stack<>();
		Collections.addAll(c, new Integer[]{1, 3, 6, 7});
		System.out.println(c.size());
		System.out.println("-------增强for------------");
		// 增强for可以迭代遍历
		for (Integer item: c) {
			System.out.println(item);
		}

		System.out.println("-------常规老式写法------------");
		Iterator<Integer> it = c.iterator();
		while (it.hasNext()) {
			Integer item = it.next();
			System.out.println(item);
			if (item == 6)
				it.remove();
		}
		
		System.out.println("-------jdk8 foreach------------");
		// 正规的老式调用方式:
		c.forEach(System.out::println);
		c.forEach((item) -> { 
				System.out.println(item);  
			}
		);

1.3 : Collection-List:线性列表: 序列

List: 有下标,有顺序。

  • boolean add(index, E); 在下标处添加元素
  • E get(index): 根据下标获取元素
  • E romove(index); 根据下标删除元素
  • E set(index, E);修改下标处元素
  • sort(Comparator a) : 排序
package com.etc.lesson19;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class TestMain5 {

	public static void main(String[] args) {
		
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(9);
		list.add(4);
		
		list.set(2, 8);
		list.add(2, 18);
		list.remove(2);
		for (int i = 0; i < list.size(); i++) {
			int item = list.get(i);
			System.out.println(item);
		}
	}
}

1.3.1 : ※ArrayList: 数组集合

底层封装数组:非线程安全。 数组默认0, add一次后10, 到临界值 自增50%。oldCapacity + (oldCapacity >> 1);

  • ArrayList(): 无参数,封装数组是长度是0
  • ArrayList(int initialCapacity); 参数是封装数组的默认长度

1.3.2: Vecoter: 封装的数组

底层封装数组: 线程安全。 默认10,每次增一倍或 指定增量((capacityIncrement > 0) ? capacityIncrement : oldCapacity

  • new Vecoter(10, 20)

1.3.3: LinkedList: 双向链表:

底层是Node组成的双向链表: 每一个node有前一个的引用和后一个的引用。

LinkedList: 方法比较多可以实现自己的栈,队列

在这里插入图片描述

arraylist 查询快,修改慢

LinkedList 修改快,查询慢

vector: 线程安全, 比arryList慢

在这里插入图片描述

package com.etc.lesson19;

import java.util.LinkedList;
import java.util.List;
import java.util.Stack;

import org.apache.poi.util.SystemOutLogger;

public class TestMain5 {

	public static void main(String[] args) {
		
		List<Integer> list = new LinkedList<>(); // 0
		list.add(1); // 10
		list.add(9);
		list.add(4);
		list.add(4);
		list.add(4);
		list.add(4);
		list.add(4);
		list.add(4);
		list.add(4);		
		list.add(4);
		list.add(19);
		
		list.set(2, 8);
		list.add(2, 18);
		list.remove(2);
		for (int i = 0; i < list.size(); i++) {
			int item = list.get(i);
			System.out.println(item);
		}
		System.out.println("---------");
		
		LinkedList<Integer> linkedlist = new LinkedList<>();
		linkedlist.add(1);
		linkedlist.add(2);
		linkedlist.add(3);
		linkedlist.add(4);
		linkedlist.add(5);
		linkedlist.add(6);
		
		int a = linkedlist.pop();
		System.out.println(a);
		System.out.println("---------");
		linkedlist.forEach(System.out::println);
		System.out.println("---------");
		int a1 = linkedlist.pollLast();
		System.out.println(a1);
		System.out.println("---------");
		linkedlist.forEach(System.out::println);
		
	}
}

posted @ 2021-04-11 12:57  剑心空明  阅读(1)  评论(0编辑  收藏  举报  来源