单列集合Colleation、List、Set及其子类

单列集合Colleation、List、Set及其子类

单列集合的顶级父类是Colleation接口、它下面又分为两派List集合和Set集合,List集合下又有两个实现类比较常用分别是LinkedList、ArrayList,Set集合下又有三个实现类比较常用分别是HashSet、LinkedHashSet、TreeSet集合。
在这里插入图片描述
这篇文章主要来说单列集合、也就是红色框框标注的。

一:Colleation集合

Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。

注意:Colleation没有索引的概念

创建方式:创建Colleation对象要new它的实现类才能进行操作

Collection<String> col = new ArrayList<>();

方法如下:

public boolean add(E e) : 把给定的对象添加到当前集合中 。
public void clear() : 清空集合中所有的元素。
public boolean remove(E e) : 把给定的对象在当前集合中删除。
public boolean contains(Object obj) : 判断当前集合中是否包含给定的对象。
public boolean isEmpty() : 判断当前集合是否为空。
public int size() : 返回集合中元素的个数。
public Object[] toArray() : 把集合中的元素,存储到数组中

		Collection<String> col = new ArrayList<>();
		//add(E e) 往集合中添加元素	
		col.add("JavaEE");
        col.add("Oracle");
        col.add("MySQL");
        col.add("Java");
     	//因为集合中重写了toString方法所以直接输出集合就可以看到元素
     	System.out.print(col + " ");
     	//输出结果:[JavaEE Oracle MySQL Java]
		
		//remove(E e)  删除指定元素	
		col.remove("MySQL");
		System.out.print(col + " ");
		//输出结果:[JavaEE Oracle Java]

		//contains(Object obj) 判断当前集合是否包含指定对象	包含返回true不包含返回false
		boolean flag = col.contains("Java"); 
		System.out.print(flag);	
		//输出结果:true

		//isEmpty() 判断集合是否为空 
		boolean flag1 = col.isEmpty();
		System.out.print(flag1);	
		//输出结果:false

		//size() 返回当前集合中的元素
		int count = col.size();
		System.out.print(count );
		//输出结果:3

		//toArray() 把当前集合转换为数组
		Objeat[] objs = col.toArray();
		System.out.print(Arrays.toString(objs) );
		//输出结果:[JavaEE, Oracle, Java]

		//clear() 清空集合中所有元素 	
		col.clear();
		System.out.print(col);
		//输出结果:[] 

二:List集合和Set集合

区别:

 List集合是有序可重复的,这里所说的有序是指存进去的顺序和取出来的顺序是一致的,有索引。
 Set集合是无序不可重复的,无索引。

List集合下面分为ArrayList和LinkedList他们都具备List有序可重复的特点
ArrayList:底层数据结构是数组、它的特点是查询快、增删慢
LinkedList:底层数据结构是双向链表、它的特点是查询慢、增删快

使用场景:如果涉及查询的业务逻辑较多就用ArrayList、如果涉及频繁的修改首尾的操作就用LinkedList

LinkedList的特有方法:
LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解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) :将元素推入此列表所表示的堆栈。
public boolean isEmpty() :如果列表不包含元素,则返回true

Set集合下面分为HashSet和LinkedHashSet和TreeSet他们都具备Set无序不可重复的特点

HashSet:底层原理是哈希表 jdk1.8以后是 数组+链表+红黑树
存储机制:
哈希表存入数据的图,数组分16个,然后根据hash值(取模)%16往数组里面存,如果存入的同一地方多于一个,那就建立链表坠在下面,链表长度大于8,就开始建立红黑树进行存储。
在这里插入图片描述
HashSet确保数据唯一性的依据是,先比较hashCode值,如果不一样就直接存储,如果一样就会再次使用equals进行值的比较,如果一样就舍弃、证明元素重复,如果不一样就以链表形式存储。
如果要存储自定义类型,要确保唯一性的话,要重写hashCode和equals方法。
HashSet 构造函数有加载因子,为0.75,存储到达百分之75,自动扩容 2倍

LinkedHashSet:底层原理是 链表+哈希表 它继承了HashSet
特点:存储是有序的。其他方法都差不多,请参见API

TreeSet:底层原理是 红黑树
作用:使用元素的自然排序规则,对集合中的元素进行排序(内容会使用Comparator比较器进行的默认的升序)
构造:
无参:TreeSet():->进行默认的排序
有参:TreeSet(Comparator<? super E> comparator) ->指定排序规则

所有集合子类都具有父类的特点,所以父类具有的特点子类都有,每个不同的子类都有自己的特点,根据不同的场景使用不同的集合。

发布了33 篇原创文章 · 获赞 35 · 访问量 1592

猜你喜欢

转载自blog.csdn.net/weixin_45216092/article/details/104933361