Java数据结构、List、Set、Collections(工具类)

一、数据结构

1. 数据结构_栈

特点:先进后出(子弹压膛)

2. 数据结构_队列

特点:先进先出(排队)

3. 数据结构_数组

特点:
查询快:有索引值。
增删慢:
每一次新增要创建新的数组
每一次的删除要调整数组元素

4. 数据结构_链表(单向和双向)

Linked{//双向
Linked pre;
E e;
Linked next;
}
特点:
查询慢:没有索引
增删快:

5. 数据结构_红黑树(新增、查找都比较快)

二叉树:每个节点两个分支
排序树/查找树:存储的元素有顺序。左小右大
红黑树:趋近于平衡树,查询速度非常快。

二、List集合

1. List常用方法

特点:
1.有序
2.可以重复
3.有索引
常用方法:
1. void add(int index,E e);//给指定索引位置添加元素
2. E remove(int index);//返回被删除的元素
3. E set(int index,E e);//返回被替换的元素
4. E get(int index);

三种遍历方式:
	普通for循环
	迭代器
	增强for循环
	
异常:
	IndexOutOfBoundsException:集合
	ArrayIndexOutOfBoundsException:数组	//继承了IndexOutOfBoundsException
	StringIndexOutOfBoundsException:字符串 //继承了IndexOutOfBoundsException

2. ArrayList集合

java.util.ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为 查询数据、遍历数据,所以 ArrayList 是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

3. LinkedList集合

底层数据结构是:链表
实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。这些方法我们作为了解即可:

public void addFirst(E e) :将指定元素插入此列表的开头。
public void addLast(E e) :将指定元素添加到此列表的结尾。
public E getFirst() :返回此列表的第一个元素。
public E getLast() :返回此列表的最后一个元素。
public E removeFirst() :移除并返回此列表的第一个元素。
public E removeLast() :移除并返回此列表的最后一个元素。
public E pop() :从此列表所表示的堆栈处弹出一个元素。
public void push(E e) :将元素推入此列表所表示的堆栈。

LinkedList是List的实现类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList 的特有方法即可。

4. Vector集合

Vector集合: 效率低,线程安全
Arraylist集合:线程不安全、效率高。

三、Set集合

java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方 法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不 同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。 Set 集合有多个实现类类,这里我们介绍其中的 java.util.HashSet 、 java.util.LinkedHashSet 这两个集合。

1. HashSet特点

java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序”不一定一致”)。 HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性 的方式依赖于: hashCode 与 equals 方法。
我们先来使用一下Set集合存储,看下现象,再进行原理的讲解:

2. 哈希值

十进制的地址值。

3. HashSet存储数据的结构(哈希表)

jdk8以后:
哈希表是:数组+链表 :同一哈希值下元素少于8个
数组+红黑树:同一哈希值下元素大于8个

	HaseSet存储元素不能重复:
		1.看哈希值是否存在
			如果不存在:直接存储
			如果存在:通过equals方法进行比较
				false:能存
				true:不能存
			
		
		给HaseSet集合存储元素,是否重复:
			是否覆盖重写equals方法和hashCode方法。

4. Set集合存储元素不重复的原理

在给Set集合新增元素的时候:

\1. 获取哈希值,确定存放的索引值位置

2.1该位置下如果没有元素,直接新增。

2.2 该位置下如果有元素,要和元素的哈希值进行比较

2.2.1 如果哈希值不同,直接存储

2.2.2 如果哈希值相同,进行equals比较

2.2.2.1 如果比较结果为true,重复的元素,不新增

2.2.2.2 如果比较结果为false,元素没有重复,新增

5. LinkedHashSet集合

是HashSet的子类
特点:有序
底层:哈希表+链表
数组+链表 +链表
数组+红黑树 +链表

四、可变参数

实际就是数组。
注意事项:
1.一个方法的参数只能有一个可变参数
2.一个方法的参数如果有多个,可变参数必须是最后一个。

五、Collections

1. 集合工具类方法_addAll&shuffle

Collections.addAll(Collection col,T… t);//给某个Collection集合中添加元素
Collections.shuffle(List list);

2. 集合工具类方法_sort(List)

如果要对某个类型的对象进行排序,那么该类需要实现Comparable接口,
覆盖重写comparto()方法。

语法:类 implements Comparable<类>{}

3. 集合工具类方法_sort(List ,Comparator )

Collections.sort(List list,Comparator com);
覆盖重写Comparator接口的compare方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值