java基础-数据结构

算法与数据结构息息相关

首先有哪些数据结构呢?

可以分为线性结构和非线性结构

常见的数据结构:

1.数组

数组是相同类型数据的有序集合

按一定先后次序排列组成

每一个数据成为一个数组元素,可以通过其下标来访问他们

数组再创建时设置长度,当插入元素时们还需要重新创建数组,资源耗费大

优点:连续的存储空间通过查询下标速度很快

缺点:插入和删除时循环赋值,速度慢,容易造成资源浪费

2.链表

每个元素存储再一个单独的小内存中,知道后一个元素的地址就是单项链表,知道前后元素的地址就是双向链表

查询慢,插入和修改速度快,存储空间不连续,不浪费资源。

3.红黑树


按照主要的父接口可以分为collection和map

collection子类

list(接口):

vector:是基于数组array的一个list,时同步线程(syn)

Arraylist:速度快一些,但是不是同步线程需要自己考虑线程安全问题

linkedlist:基于链表,增删快,查询慢

set(一堆无重复的集合)

Hashset和Treeset是用HashMap和TreeMap实现的集合

HashMap是线程不安全的

Hashtable是线程安全的(syn)但是不如concurrentHashMap(分段锁)性能好

weekHashMap可能会被gc掉entry因为其是使用弱引用的

栈:先进后出

队列:头出尾进

数组:

链表:

树:

堆:

散列表:hash

ArrayList和linkedlist的区别?

arraylist是基于数组的linkedlist是基于链表的

查询熟读快,增删速度慢

ArrayList和vector的区别?

都是基于数组的,但是ArrayList是线程不安全的,所以性能会好一些

扩容方式ArrayList扩容是阔50%,vector是扩容100%。所以vector更适合存放更大量的数据

哈希冲突?

不同的键可能会有相同的hash码

解决方案:

1.链地址法:数组加链表,链表过长转化为红黑树

2,开放地址法:开放地址法

3.再hash:当发生hash冲突时使用一个新的hash函数计算出新的哈希值存放在新的桶里

HashMap的底层实现?

数组+链表

数组+链表+红黑树 1.8

当链表中元素个数大于8(阈值)&&数组长度>64时,链表转化为红黑树

低于阈值时链表查询新增效率高,大于阈值时红黑树效率高

当红黑树节点小于6 时会退回链表

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值