类集笔记

类集

常见的数据结构

:stack

限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。

存元素:压栈

取元素:弹栈

队列:queue

只允许在表的一端进行擦汗如,在另一端进行删除元素的线性表。队尾(rear)是允许插入的一端,队头(front)是允许删除的一端。空队列是不含元素的空表。

数组:array

有序的元素序列,是内存中开辟一段连续的空间,并在此空间存放元素,查找块,增删慢。

链表:linked list

由一系列结点node组成,结点可以在运行时动态生成。每个结点有两个部分,一是存储数据的数据部域,二是存放下个结点地址的指针域。插入元素慢,增删元素快。

红黑树二叉树:binary tree

是每个结点不超过2的有序树

红黑树本身就是一棵二叉查找树,将结点插入后,该树仍然是一棵二叉查找树,意味着树的键值仍然是有序的。

红黑树的约束:

1.节点可以是红色或黑色的

2.根节点是黑色的

3.叶子节点(特指空节点)是黑色的

4.每个红色节点的子节点都是黑色的

5.任何一个节点到其每个叶子节点的所有路径上黑色节点数相同

红黑树的特点:

速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍。

Collection 接口

Collection接口是在整个java类集中保存单值的最大操作接口,里面每次操作的时候都只能保存一个对象的数据。此接口定义在java.util包中。

此接口定义如下:

public interface Collection<E> extends Iterable<E>

在开发中不会直接使用Collection接口,而使用其操作的子接口:List(允许重复),Set(不允许重复).

List接口

List接口是Collection接口的子接口,里面的所有内容都是允许重复的。它是一个元素存取有序的集合,

是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。

定义:

public interface List<E>extends Collection<E>

此接口的常用实现类:

ArrayList(95%)(线程安全,不允许多线程同时访问),Vector(4%)(线程不安全,允许多线程同时访问),LinkedList(1%)(链表实现)

ArrayList

有序存储。

ArrayList<Integer>data = new ArrayList<>();

ArrayList的无参构造方法

构造一个初始容量为10的空列表,刚创建时容量为0,存入第一个数据后容量变为10

ArrayList的一参构造方法

构造一个具有指定初始容量的空列表。

ArrayList的add方法不论是否添加成功都只返回true

扩容时每次扩容为旧长度的1.5倍如果长度超出范围则变为负数长度,抛出异常。

Vector

可以多个线程同时访问

扩容的增量可指定

若增量为0或小于零则扩容时长度为两倍。

LinkedList

使用的是双向链表结构,增删快,查找慢。可以用来当作栈和队列使用。

模拟堆栈方法

压栈

data.push();

弹栈

data.pop();

队列方式:

从首部添加:

data.addFirst();

从尾部加:

data.addLast();

取的时候用data.remove();

用法同添加相同。

Iterator与ListIterator迭代器

用法:

Iterator<Integer> iterator = data.iterator();

while(iterator.hasNext()){

	Integer i = iteratorl.next();

	System.out.println(i);

}

往上走:iterator.previout();

往下走:iterator.next();

更改指定内容:iterator.set();

增加:iterator.add();

Set

不包含重复元素。

取得数据的方法:iterator或toArray转变为数组输出。

HashSet

是一种散列存放的结构。

存放无序。

内部是双值的存放方式。

添加时有返回值。true表示存储成功,false表示失败(有这个数据因此失败)

TreeSet

是一种树状存放的结构

存放有序(自然顺序)

其迭代器是快速失败的(中途数据改动后,迭代器将抛出异常中止程序)

自定义类的存放会比较大小,因此要实现内部的Comparable接口,实现比较方法:

public int compareTo(Person o){

	this与o比较,负数this/0一样大/正数this}

(若两个对象的涉及比较的属性相同则不会再次存储)

Comparator

Map

双值存储结构:键值对 数据。

Map集合的键(key)不可重复

keySet();可以把键通过set存储,对键进行迭代然后用键从map中取出数据。

clear():清空集合

get(Object key):返回键对应的值

put(K key,V value):存储一个键和一个值

putAll(Map<? extends K,? extends V> m ):存储一组键和一组值。

remove():可以根据键删值,或者通过键+值删除。

containsKey():判断一个键在集合中是否存在

containsValue():判断一个值是否在集合中存在

replace(k,v):通过键和值把一个内容替换掉。

size():获取当前集合长度

values():把所有值变成一个Collection单值存储遍历返回。

put和remove有返回值,若添加成功说明原来为null因此返回null,若失败说明原来有值,返回原值。若删除成功则返回值,若失败则返回null。

HashMap的哈希表

对象数组加链表。

默认值为16 0-15

将对象的hashCode%16,得到下标,将数据存放在那个位置,若位置相同则存在每个位置的链表里(称为桶),当一个桶的数据大于8时,链表会转换成红黑树,若红黑树减少到6时,从红黑树转换为链表。

初始桶数量 16

散列因子0.75 当哈希桶存放数据达到75%时,哈希表扩容至两倍大。

HashMap、Hashtable、ConcurrentHashMap、TreeMap、LinkedHashMap

HashMap线程不安全,效率高,不保证存储顺序

Hashtable线程安全,效率低

ConcurrentHashMap采用分段锁机制,保证线程安全,效率又比较高,若操作的下标不同则同时,相同则排队。

TreeMap会自动进行排序

LinkedHashMap更好使用HashMap同时保证存储顺序.用链表加hash表一起存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值