Java——集合,stack栈,Deque双端队列,优先队列

0.首先让我们大概看看集合的选择

Java——集合浅析.
Java—— HashMap和HashTable.
Java——ArrayList基本使用.
Connection接口:单列集合的根接口,它表示一组对象,这些对象也称为Collection的元素

Map接口:双列集合的根接口,Map集合可以存储一对对象,即会一次性保存两个对象,存在key = value 结构,其最大的特点还是可以通过key 找到对应的value 值。

Connection接口: List: 有序,可重复

  • ArrayList
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程不安全,效率高

  • Vector
    优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程安全,效率低

  • LinkedList
    优点: 底层数据结构是链表,查询慢,增删快。
    缺点: 线程不安全,效率高

Connection接口: Set : 无序,唯一

  • HashSet
    底层数据结构是哈希表。(无序,唯一)
    如何来保证元素唯一性?
    依赖两个方法:hashCode()和equals()

  • LinkedHashSet
    底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
    1.由链表保证元素有序
    2.由哈希表保证元素唯一

  • TreeSet
    底层数据结构是红黑树。(唯一,有序)
    1 如何保证元素排序的呢?
    自然排序
    比较器排序
    2 如何保证元素唯一性的呢?
    根据比较的返回值是否是0来决定

Map接口: HashMap、TreeMap、HashTable

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。
  • Hashtable是线程安全的,HashMap不是线程安全的。
  • HashMap效率较高,Hashtable效率较低。
  • Hashtable不允许null值,HashMap允许null值(key和value都允许)
集合的选择

1.单列还是双列?

  • 单列:Collection类型的
  • 双列;Map类型

2.选择单列后看元素是否唯一

  • 是:选择Set集合

    看元素是否排序 ?

    • 是:TreeSet
    • 否:HashSet
  • 否: 选择List集合

    安全线高低 ?

    • 高:Vector

    • 低:arrayList 或LinkedList

      • 增删多:LinkedList
      • 查询多:ArrayList

1. Vector 类

Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:

  • Vector 是同步访问的。
  • Vector 包含了许多传统的方法,这些方法不属于集合框架。
  • Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
  • Vector是 线程安全的 ,即它的大部分方法都包含有关键字synchronized
    若对于单一线程的应用来说,最好使用ArrayList代替Vector,因为这样效率会快很多(类似的情况有StringBuffer与StringBuilder);而在多线程程序中,为了保证数据的同步和一致性,可以使用Vector代替ArrayList实现同样的功能。

Vector 类支持 4 种构造方法。

  • 第一种构造方法创建一个默认的向量,默认大小为 10:
Vector()
  • 第二种构造方法创建指定大小的向量。
Vector(int size)
  • 第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。
Vector(int size,int incr)
  • 第四种构造方法创建一个包含集合 c 元素的向量:
Vector(Collection c)

除了从父类继承的方法外 Vector 还定义了以下方法:Java Vector 类.

2. Stack 类

  • 栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
  • 堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。
  • 与Vector一样,也是线程安全的

除了由Vector定义的所有方法,自己也定义了一些方法:
在这里插入图片描述

import java.util.*;
 
public class StackDemo {
   
 
    static void showpush(Stack<Integer> st, int a) {
   
        st.push(new Integer(a));
        System.out.println("push(" + a + ")");
        System.out.println("stack: " + st);
    }
 
    static void showpop(Stack<Integer> st) {
   
        System.out.print("pop -> ");
        Integer a = (Integer) st.pop();
        System.out.println(a);
        System.out.println("stack: " + st);
    }
 
    public static void main(String args[]) {
   
        Stack<Integer> st = new Stack<Integer>();
        System.out.println("stack: " + st);
        showpush(st, 42);
        showpush(st, 66);
        showpush(st, 99);
        showpop(st);
        showpop(st);
        showpop(st);
        try {
   
            showpop(st);
        } catch (EmptyStackException e) {
   
            System.out.println(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值