Java - Collection 接口及主要实现类

一、Collection

1. 基本介绍

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.Listjava.util.Set。其中:

  • List 的特点是有索引、存取有序、可重复。
  • Set 的特点是无索引、存取无序(LinkedHashSet除外)、不可重复。

而两个子接口又分别有各自对应的实现类。其中,List 接口的主要实现类包括 java.util.ArrayListjava.util.LinkedList;Set 接口的主要实现类有 java.util.HashSetjava.util.LinkedHashSetjava.util.TreeSet。可以通过一张图来描述 Collection 接口的继承实现体系。
在这里插入图片描述

2. 常用方法

  • public boolean add(E e):把给定的对象添加到当前集合中 。
  • public void clear():清空集合中所有的元素。
  • public boolean remove(E e):把给定的对象在当前集合中删除。
  • public boolean contains(E e):判断当前集合中是否包含给定的对象。
  • public boolean isEmpty():判断当前集合是否为空。
  • public int size():返回集合中元素的个数。
  • public Object[] toArray():把集合中的元素,存储到数组中。
public class DemoCollection {
    public static void main(String[] args) {
     // 创建集合对象 
    	Collection<String> coll = new ArrayList<String>();                        // 使用多态形式
    	// 使用方法
    	// 添加功能  boolean  add(String s)
    	coll.add("小李广");
    	coll.add("扫地僧");
    	coll.add("石破天");
    	System.out.println(coll);
    	// boolean contains(E e) 判断o是否在集合中存在
    	System.out.println("判断  扫地僧 是否在集合中"+coll.contains("扫地僧"));
    	//boolean remove(E e) 删除在集合中的o元素
    	System.out.println("删除石破天:"+coll.remove("石破天"));
    	System.out.println("操作之后集合中元素:"+coll);
    	
    	// size() 集合中有几个元素
		System.out.println("集合中有"+coll.size()+"个元素");
		// Object[] toArray()转换成一个Object数组
    	Object[] objects = coll.toArray();
    	// 遍历数组
    	for (int i = 0; i < objects.length; i++) {
        	System.out.println(objects[i]);
        }
        // void  clear() 清空集合
        coll.clear();
        System.out.println("集合中内容为:"+coll);
        // boolean  isEmpty()  判断是否为空
        System.out.println(coll.isEmpty());  	
    }
}

二、List

1. 基本介绍

java.util.List 接口继承自 Collection 接口,习惯性地会将实现了 List 接口的对象称为 List 集合。这类集合具有以下特点:

  • List集合中的元素是以线性方式进行存储的,基于不同的实现类有不同的表现形式(数组/链表)
  • List集合中的元素是带索引的,可以通过索引来访问集合中的指定元素
  • List集合中的元素是有序的,即元素的存入顺序和取出顺序一致。
  • List 集合中的元素是可重复的,允许出现重复的元素,可以通过元素的 equals() 方法比较两个元素是否重复

2. List 的特有方法

List集合特有方法均与索引相关:

  • public void add(int index, E element):将指定的元素,添加到该集合中的指定位置上。
  • public E get(int index):返回集合中指定位置的元素。
  • public E remove(int index):移除列表中指定位置的元素, 返回的是被移除的元素。
  • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
public class ListDemo {
    public static void main(String[] args) {
                // 创建List集合对象
    	List<String> list = new ArrayList<String>();
    	
    	// 往 尾部添加 指定元素
    	list.add("图图");
    	list.add("小美");
    	list.add("不高兴");
    	
    	System.out.println(list);
    	// add(int index,String s) 往指定位置添加
    	list.add(1,"没头脑");
    	
    	System.out.println(list);
    	// String remove(int index) 删除指定位置元素  返回被删除元素
    	// 删除索引位置为2的元素 
    	System.out.println("删除索引位置为2的元素");
    	System.out.println(list.remove(2));
    	
    	System.out.println(list);
    	
    	// String set(int index,String s)
    	// 在指定位置 进行 元素替代(改) 
    	// 修改指定位置元素
    	list.set(0, "三毛");
    	System.out.println(list);
    	
    	// String get(int index)  获取指定位置元素
    	
    	// 跟size() 方法一起用  来 遍历的 
    	for(int i = 0;i<list.size();i++){
    		System.out.println(list.get(i));
    	}
    	//还可以使用增强for
    	for (String string : list) {
	        System.out.println(string);
		}  	
	}
}

3. List 接口的实现类

java.util.ArrayList 底层采用数组实现,查询快,增删慢
在这里插入图片描述
java.util.LinkedList 底层采用双向链表实现,查询慢,增删快
在这里插入图片描述

其中,由于 LinkedList 自身的结构特性,JDK提供了大量有关首尾操作的方法:

  • 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。
public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> link = new LinkedList<String>();
        //添加元素
        link.addFirst("abc1");
        link.addFirst("abc2");
        link.addFirst("abc3");
        System.out.println(link);
        // 获取元素
        System.out.println(link.getFirst());
        System.out.println(link.getLast());
        // 删除元素
        System.out.println(link.removeFirst());
        System.out.println(link.removeLast());
        while (!link.isEmpty()) { //判断集合是否为空
            System.out.println(link.pop()); //弹出集合中的栈顶元素
        }
        System.out.println(link);
    }
}

三、Set 接口

1. 基本介绍

java.util.Set 接口同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,但是比 Collection 接口更加严格。Set 接口的实现类对象具有以下特点:

  • Set 接口实现类中的元素是无索引的,无法通过索引来访问集合中的指定元素
  • LinkedHashSet 以外,Set 接口实现类中的元素是无序的,元素的存入顺序和取出顺序不能保证一致
  • Set 接口实现类中的元素是不可重复的,不允许出现重复的元素,在添加元素的过程中,Set类对象会通过某些规则保证存入的元素不出现重复

2. Set 接口的实现类

java.util.HashSet 底层采用散列表实现,无索引、不可以存储重复元素、存取无序。当出现哈希冲突时,相同哈希值的元素采用链表结构存储,当同一哈希值的冲突元素超过 8 个时,改为红黑树存储。

在这里插入图片描述

public class HashSetDemo {
    public static void main(String[] args) {
        //创建 Set集合
        HashSet<String>  set = new HashSet<String>();
        //添加元素
        set.add(new String("cba"));
        set.add("abc");
        set.add("bac"); 
        set.add("cba");  
        //遍历
        for (String name : set) {
            System.out.println(name);
        }
    }
}

java.util.LinkedHashSet 底层采用散列表实现,同样使用链表+红黑树的搭配解决哈希冲突的问题。且无索引、不可以存储重复元素、存取有序。数据结构与存储机制与 HashSet 一致,但是多了一个维护数据存储顺序的链表。

在这里插入图片描述

public class LinkedHashSetDemo {
    public static void main(String[] args) {
		Set<String> set = new LinkedHashSet<String>();
		set.add("bbb");
		set.add("aaa");
		set.add("abc");
		set.add("bbc");
		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
    }
}

运行结果:

  bbb
  aaa
  abc
  bbc

注意:Set接口实现类中的元素能够保证唯一性,实际上是根据对象的 hashCode() 和 equals() 方法来决定的。如果向 Set 类集合中存放自定义的对象,保证其唯一性的方式是复写 hashCode() 和 equals() 方法建立属于当前对象的比较方式。

  • 26
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java 中的 Collection 接口是一个顶层接口,它是 List、Set 和 Queue 接口的父接口。它定义了一些通用的方法,可以应用于所有集合,如添加、删除、遍历等操作。下面是 Collection 接口主要方法: - boolean add(E e):将指定的元素添加到集合中,如果添加成功则返回 true,否则返回 false。 - boolean remove(Object o):从集合中删除指定的元素,如果删除成功则返回 true,否则返回 false。 - boolean contains(Object o):判断集合中是否包含指定的元素,如果包含则返回 true,否则返回 false。 - boolean isEmpty():判断集合是否为空,如果为空则返回 true,否则返回 false。 - int size():返回集合中元素的个数。 - void clear():清空集合中的所有元素。 - Object[] toArray():将集合转换为数组。返回包含集合中所有元素的数组。 Java 中常用的 Collection 实现有 ArrayList、LinkedList、HashSet、TreeSet、HashMap 和 TreeMap 等。其中 ArrayList、LinkedList 和 HashSet 是最常用的三种实现。 - ArrayList:基于动态数组实现,支持随机访问和快速插入、删除操作。 - LinkedList:基于双向链表实现,支持在任意位置插入、删除元素,但访问元素时需要遍历整个链表,效率较低。 - HashSet:基于哈希表实现,无序集合,不允许重复元素。 - TreeSet:基于红黑树实现,有序集合,不允许重复元素。 - HashMap:基于哈希表实现,无序键值对,key 不允许重复。 - TreeMap:基于红黑树实现,有序键值对,key 不允许重复。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值