Java中常见的数据类型一

栈,队列,数组,链表,红黑树

栈:stack,先进后出

队列:queue,先进先出

数组:array,查询快,增删慢,数组的地址是连续的,通过数组首地址和索引可快速查看某元素。

数组的长度是固定的,想增加/删除一个元素,必须创建一个新数组,把源数组的数据复制过来,源数组在内存中被垃圾回收。

链表:linkedlist,查询慢,增删快。链表中地址不是连续的,每次查询元素,都必须从头开始查询。链表结构,增加和删除一个元素,对整体结构没有影响,所以增删快。

链表中每一个元素称为一个节点,一个节点包含一个数据源(存数据),两个指针(存地址)

--自己的地址 | 数据 | 下一个节点的地址

 

单项链表:链表中只有一条链子,不能保证元素的顺序。

双向链表:链表中有两条链子,有一条链子专门记录元素的顺序,是一个有序集合。

红黑树:binary tree;红黑树是一个二叉树,根,分支,节点。左节点,右节点。

二叉树:分支不能超过两个。

排序树(查找树):在二叉树的基础上,元素是有大小顺序的。左子树小,右子树大。

平衡树:左孩子的数量和右孩子数量相等。

不平衡树:左孩子不等于右孩子的数量。

红黑树:

特点:趋近于平衡树,查询的速度非常的快,查找叶子节点最大次数和最小次数不能超过2倍。

约束条件:

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

2.根节点是黑色的。

3.叶子节点,是黑色的

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

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

 

ArrayList底层是数组实现的。不是同步的。

LinkedList底层是双链表结构,方便元素添加和删除。不是同步的。

Vector单列集合,同步的,Java1.1的集合

 

Set接口,继承了Collection接口

Set接口特点:1.不允许存储重复数据。2.没有索引,不能使用普通的for循环

两个实现类:HashSet,TreeSet

HashSet特点:

1.不允许存重复数据

2.没有索引,不能使用普通for循环

3.是一个无序集合,存元素和取元素的顺序有可能不一致

4.底层是一个哈希表(查询速度非常快)

哈希值:是一个十进制的整数,由系统随机给出,是一个逻辑地址,模拟出来的,不是实际存储地址。

HashSet集合存储数据的结构(哈希表)

jdk1.8之前:哈希表 = 数组+链表

jdk1.8之后:哈希表 = 数组+链表 哈希表 = 数组+红黑树(提高查询速度)

哈希表特点:速度快,初始化长度为16的数组。把元素进行分组,相同哈希值是一组,链表/红黑树结构把相同哈希值的元素连接到一起。

存储数据到集合中:

1.先计算元素的哈希值。

2.把哈希值放到初始化的数组中,做为键,把数据放到数组关联的链表里。

3.如果链表的长度超过了8位,就会把链表转换为红黑树。提高查询速度。

两个元素不同,哈希值相同,叫做哈希冲突。

Set集合不允许存重复元素。Set集合在调用add方法的时候,add方法会调用元素的hashcode方法和equals方法,判断元素是否重复。

 

使用hashset存储自定义类型元素,存储的元素必须重写hashCode方法和equals方法。

LinkedHashSet集合:具有可预知可迭代顺序的Set接口的哈希表和链接列表实现。其特点是:底层是一个哈希表(数组+链表/红黑树)+链表,多了一条链表,记录元素的存储顺序,保证元素有序。

 

可变参数:jdk1.5之后加入的:

格式:修饰符 返回值类型 方法名(参数类型... 形参名){}

等价于:修饰符 返回值类型 方法名(参数类型[] 形参名){}

使用前提:方法参数列表数据类型已经确定,但是参数个数不确定,可以使用可变参数。

可变参数原理:可变参数底层是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数,传递的参数个数,可以是0个,1,2。。。多个。

注意事项:1.一个方法的参数列表,只能有一个可变参数。

2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。

 

Colletions工具类:

addAll(Collection<T> c,T... elements)往集合中添加多个元素

shuffle(List<?> list) 打乱集合元素顺序(纸牌类游戏,洗牌时经常用的方法)。

sort(List<T> list) 将集合中的元素按照默认的规则排序,默认是升序排序,前提是被排序的元素,必须实现Comparable,重写接口中compareTo()方法,定义排序规则。

Comparable接口的排序规则:

自己-参数:升序。参数-自己:降序。

sort(List<T> list,Comparator<? super T>) 将集合元素按照指定规则排序。相当于一个第三方裁判。

Comparator和Comparable区别:

Comparator方法是compare(T t,T t2),相当于找一个第三方裁判。

Comparable方法是compareTo,自己和别人比较。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值