携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
Java中集合框架结构:
Collection(接口):单列集合
-
List(接口):有序的,可以存储重复元素
-
ArrayLIst(子类):数组结构
-
LinkedList(子类):链表结构
-
-
Set(接口):无序的,不能存储重复元素
-
HashSet(子类):哈希表结构
-
LinkedHashSet(子类):链表、哈希表结构
-
Map(接口):双列集合--数据结构全部是应用在"键"
-
HashMap(子类):"键"是哈希表结构
-
LinkedHashMap(子类):"键"是链表、哈希表结构。
Collection接口常用方法:
-
1.boolen add(Object e);添加 向集合中添加一个元素;如果元素存储成功返回true(对于ArrayList,永远返回true);如果存储失败,返回false,例如:向HashSet中添加一个重复元素时,会返回false。
-
2.clear();清空
-
3.boolean contains(Object o):如果当前集合中包含对象o,返回true,否则返回false;
-
4.boolean remove(Object o) : 从集合中移除对象o,成功返回true,否则返回false
-
5.int size():获取集合大小
-
6.Object[] toArray():将集合内的所有元素存储到一个Object[]中,并返回。将集合转换为数组;
-
7.Iterator iterator():获取一个迭代器,用于遍历元素的。
List集合特有方法:
-
public void add(int index,Object element):在index位置插入元素element,原index及其后续元素依次后移。
-
public int indexOf(Object o):返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1
-
public ListIterator listIterator():返回"列表迭代器",双向迭代器,它是Iterator的子接口。
-
public Object remove(int index):移除index位置上的元素;
-
public E set(int index,E element):将index位置上的元素替换为element,返回值:被替换的元素;
-
public List subList(int fromIndex,int toIndex):截取集合,从fromIndex开始,到toIndex - 1 的位置
-
public E get(int index) : 获取index位置上的元素;
集合_数据结构_栈
1.特点:后进先出;
2.作用:模拟现实中的:压弹夹,摞文件.....
集合_数据结构_队列
1.特点:先进先出
2.作用:模拟现实中任何排队形式的应用,队列最前面的得到最先处理。
集合_数据结构_数组
1.特点:查询快,增删慢;
2.作用:对于有序的存储、不经常增删的集合需求,非常适用;
集合_数据结构_链表
1.特点:查询慢,增删快;
2.作用: 由于有序的存储、而且需要经常增删元素的需求,可以使用链表
LinkedList的特有方法:
-
addFirst(Object o):可以模拟压栈,将元素添加到当前列表的第一个位置。、
addLast(Object o):可以模拟队列,将元素添加到氮气列表的末尾。
-
getFirst():获取第一个元素
getLast():获取最后一个元素
-
removeFirst():移除第一个元素(getFirst() + removeFirst()就可以模拟弹栈)
removeLast():移除最后一个元素
-
pop():获取第一个元素,并且移除掉第一个元素。可以实现弹栈
-
push():相当于addFirst(),压栈
-
isEmpty():判断列表是否为空。还可以用size();方法判断列表是否为空
HashSet的基本使用:
- Set集合的特点:
- 无序的;
- 不能存储重复元素;
注意:Set分支,没有特有方法,全部都是使用从Collection继承下来的方法。
集合_哈希表结构
见图:
所以:判断元素的唯一性:
先判断hashCode(),然后再判断equals()
集合_自定义对象重写equals方法和hashCode方法
1.要使用HashSet存储自定义对象,需要对自定义对象重写:hashCode()和equals()方法
LinkedHashSet的特点:
LinkedHashSet:它是Set的特例,它是有序的Set
由链表保证顺序;
由哈希表保证元素唯一
数据结构小结:
1).栈:可以使用LinkedList实现。后进先出
2).队列:可以使用LinkedList实现。先进先出
3).数组:ArrayList。查询快,增删慢
4).链表:LinkedList。查询慢,增删快
5).哈希表:HashSet。综合了数组和链表的优点,查询,增删都快。但任何操作都要先经过哈希算法,所以哈希算法的复杂度决定了哈希表的性能。
判断集合元素唯一的原理
先判断hashCode():
不同:存储
相同:再和相同哈希值的所有对象依次判断equals()
全部不同:存储
有一个相同:不存