java基础6(Collection集合)

一.Collection集合

集合:
集合是java中提供的一种容器,可以用来存储多个数据。
集合和数组的区别:
数组的长度是固定的。集合的长度是可变的。
数组中存储的是同一类型的元素,可以存储任意类型数据。集合存储的都是引用数据类型。
如果想存储基本类型数据需要存储对应的包装类型。

1.1 Collection常用功能

以下方法适用于操作所有的单列集合
1.public boolean add(E e): 把给定的对象添加到当前集合中 。
2.public void clear() :清空集合中所有的元素。
3.public boolean remove(E e): 把给定的对象在当前集合中删除。
4.public boolean contains(Object obj) : 判断当前集合中是否包含给定的对象。
5.public boolean isEmpty() : 判断当前集合是否为空。
6.public int size() : 返回集合中元素的个数。
7.public Object[] toArray(): 把集合中的元素,存储到数组中

1.2迭代器、增强for

1.1.1迭代器

public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。
迭代:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
public E next() :返回迭代的下一个元素。
public boolean hasNext() :如果仍有元素可以迭代,则返回 true。

public class IteratorDemo { 
	public static void main(String[] args) { 
		// 使用多态方式 创建对象 
		Collection<String> coll = new ArrayList<String>();
		// 添加元素到集合 
		coll.add("jxl"); 
		coll.add("nh"); 
		coll.add("haha");
		  //使用迭代器 遍历 每个集合对象都有自己的迭代器 
		 Iterator< String > it = coll.iterator(); 
		 // 泛型指的是 迭代出 元素的数据类型 
		 while(it.hasNext()){ 
			 //判断是否有迭代元素 
			 String s = it.next();
			 //获取迭代出的元素 
			 System.out.println(s); 
		 }
	 } 
 }
  1. 在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出
    java.util.NoSuchElementException没有集合元素异常。
  2. 在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出
    ConcurrentModificationException并发修改异常.

1.1.2 增强for

它的内部原
理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式
for(元素的数据类型 变量 : Collection集合or数组){
//写操作代码
}

	int[] arr = {3,5,6,87}; 
	//使用增强for遍历数组 
	for(int a : arr){
		//a代表数组中的每个元素 
		System.out.println(a);
	 }
Collection<String> coll = new ArrayList<String>();
coll.add("jxl"); 
coll.add("xxx"); 
for(String s :coll){ 
 	System.out.println(s); 
}

二. 集合常用类的继承体系

在这里插入图片描述
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,
它有两个重要的子接口,分别是java.util.List 和 java.util.Set 。
List: 元素有序、元素可重复。主要实现类有 java.util.ArrayList 和 java.util.LinkedList
Set :元素不可重复。主要实现类有 java.util.HashSet 和 java.util.LinkedHashSet 。

2.1 List接口

  1. 允许出现重复的元素,线性方式存储的,可以通过索引来访问集合中的指定元素。
  2. List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
  3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

常用方法
继承了Collection接口中的全部方法,还增加了一些根据元素索引来操作集合的特有方法
public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
public E get(int index) :返回集合中指定位置的元素。
public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

2.1.1 ArrayList集合

java.util.ArrayList 集合数据存储的结构是数组结构。
元素增删慢,查找快 (大部分用于查询数据、遍历数据)

2.1.2 LinkedList集合

java.util.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。

3.1 set接口

Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
Set 集合有多个子类,现在介绍其中的 java.util.HashSet 、 java.util.LinkedHashSet 这两个集合。

3.1.1 HashSet集合

  1. 存储的元素是不可重复的
  2. 元素都是无序的(即存取顺序不能保证不一致)。
  3. java.util.HashSet 底层的实现其实是一个 java.util.HashMap 支持
    HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存储和查找性能。

3.1.2 HashSet集合存储数据的结构

哈希表储数据的结构:
在JDK1.8之前,哈希表底层采用 数组+链表实现
而JDK1.8中,哈希表 数组+链表+红黑树,当链表长度超过阈值(8)时,将链表转换为红黑树
在这里插入图片描述
存储流程图

3.1.1 LinkedHashSet

java.util.LinkedHashSet (有序),它是链表和哈希表组合的一个数据存储结构。

发布了12 篇原创文章 · 获赞 4 · 访问量 388

猜你喜欢

转载自blog.csdn.net/weixin_44079478/article/details/104837097
今日推荐