zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Java】一篇文章带你了解Collection接口、List集合、Set集合、Map集合

2023-09-14 09:14:31 时间

目录

1、集合类简介

2、Collection接口(Java API文档)

3、List接口

4、List接口实现类

5、例子

6、Set集合 

7、Map接口

8、Map接口实现类


1、集合类简介

java.util包【Java API文档】中提供了一些集合类,集合用来存放对象引用:

集合类有:

  • List集合
  • Set集合
  • Map集合

其中List与Set继承了Collection接口。

2、Collection接口(Java API文档

Collection中常用的方法:

1、boolean add(E e)

添加元素到Collection集合中

2、boolean isEmpty()

检查Collection集合是否包含有元素,如果没有包含元素,则返回true,否则返回false。

此方法与contains方法的区别是,此方法是判断集合是否包含有元素,就是说,如果一个元素都没有的话就返回true,如果有一个或者以上就返回false。

contains的方法是判断集合中是否包含特定的元素,如果包含特定的元素就返回true,如果没有包含特定元素就返回false。

3、Iterator<E> iterator()

返回在此collection集合的元素上进行迭代的迭代器

4、boolean remove(Object o)

从collection集合中删除指定的元素,如果集合中有这个元素,并且删除成功,那么就返回true,否则返回false。

5、int size()

返回集合中元素个数

add()和Iterator()函数:

例:遍历集合,通过迭代器(Iterator)来实现。

import java.util.*;
public class Test {
    public static void main(String[] args){
        Collection<String>list=new ArrayList<>();//实例化集合类对象
        list.add("f");
        list.add("a");
        list.add("n");
       //法1:遍历集合
        for(String s:list){
            System.out.println(s);
        }
        //法二:创建迭代器,进行遍历
        Iterator<String>it=list.iterator();//创建迭代器
        while(it.hasNext()){//判断是否有下一个元素
            String str=(String)it.next();//next()方法的返回值是Object
            System.out.println(str);
        }
    }
}

结果显示:

3、List接口

List集合包括List接口以及List接口的所有实现类,List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。

List接口继承了Collection中的所有方法,List下还有其它方法:

get(int index):获得指定索引位置元素;

set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象;

4、List接口实现类

(1)ArrayList类

   实现了可变数组,允许保存所有元素,包括null,可以根据索引位置对集合进行快速的随机访问;

   缺点:向指定索引位置插入对象或删除对象的速度较慢;

(2)LinkedList类

   采用链表结构保存对象,使用LinkedList类实现List集合效率较高,但对于随机访问集合中的对象,使用LinkedList类实现List集合的效率较低。

使用List集合时通常声明为List类型,可通过不同的实现类来实例化集合:

List<E>list=new ArrayList<>();
List<E>list2=new LinkedList<>();

E:Java中合法的数据类型;

5、例子

在项目中创建Test类,在主方法中创建集合对象。

import java.util.*;
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();//创建集合对象
        list.add("f");
        list.add("a");
        list.add("n");
        int i = (int) (Math.random() * list.size());
        System.out.println("随机数组中的元素:" + list.get(i));
        list.remove(2);
        System.out.println("将索引为2的元素从数组中移除,数组中的元素是:");
        for(String s:list){
            System.out.println(s);
        }
    }
}

6、Set集合 

Set集合中的对象不按特定的方式排序,只是简单的把对象加入集合中,但Set中不能包含重复对象。

Set接口中常用的实现类有HashSet和TreeSet类。

HashSet类:

实现Set接口,由哈希表支持,它不保证Set迭代顺序,特别是它不保证该顺序恒久不变,此类允许使用null元素。

import java.util.*;
public class Test {
    public static void main(String[] args) {
        HashSet<String >tree=new HashSet<>();
        tree.add("dlh");
        tree.add("fjf");
        tree.add("cwk");
        for(String c:tree){
            System.out.println(c);
        }
    }
}

TreeSet类:
实现Set接口,还实现java.util.SortedSet接口,TreeSet类实现了Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序。

import java.util.*;
public class Test {
    public static void main(String[] args) {
        TreeSet<String >tree=new TreeSet<>();
        tree.add("fjf");
        tree.add("cwk");
        tree.add("dlh");
        for(String c:tree){
            System.out.println(c);
        }
    }
}

 TreeSet类增加的新方法:

first():返回Set集合中第一个元素
last():返回Set集合中最后一个元素
comparator():返回此Set中的元素进行排序的比较器。
headSet(E toElement):返回此Set中的toElement之前的所有对象。
subSet(E fromElement,E toElement):返回包含fromElement 到 toElement(不包含)之间的对象。
tailSet(E fromElement):返回包含fromElement 之后的所有对象。

7、Map接口

Map接口中常用的一些方法:

Map接口中定义的一些常用方法:
* public V put (K key,V value):把键与值添加到Map集合中
* public V remove (Object key):删除key对应的值
* public V get(Object key):根据指定的键,获取对应的值
* public V containKey(Object key):判断是否包含指定的键
* public V Set<K> keySet:获取Map集合中所有的Key,存储到set集合中
* public V set<Map.entry<K,v>> entrySet:当Map类集合创建的时候,会生成一个Entry对象
* Map.entry<K,v>是一个接口
* 他是用来存储key和value的,每一组一个对象。这个方法可以把这些所有的Entry对象放到Set集合中。
* Entry对象中有getKey()和getValue()两种方法可以提取出key和value的值*/

例:HashMap类实现的Map集合:

import java.util.*;
public class Test {
    public static void main(String[] args) {
        Map<String ,String>map=new HashMap<>();//创建Map实例
        map.put("29","范同学");                //向集合中添加对象
        map.put("22","邓同学");
        map.put("10","陈同学");

        Set<String>set=map.keySet();//构建Map集合中所有key对象的集合
        for(String c:set){    //遍历集合
            System.out.println(c);
        }

        Collection<String>coll=map.values();//构建Map集合所有values对象集合
        for(String c:coll){
            System.out.println(c);
        }
    }
}

8、Map接口实现类

HashMap类实现的Map集合添加和删除映射关系效率高。此类不保证映射顺序。允许使用null值和null键。

TreeMap映射关系存在一定的顺序。不允许使用键对象null。

TreeMap类实现:

import java.util.*;
public class Test {
    public static void main(String[] args) {
        Map<String ,String>map=new TreeMap<>();//创建Map实例
        map.put("29","范同学");                //向集合中添加对象
        map.put("22","邓同学");
        map.put("10","陈同学");

        Set<String>set=map.keySet();//构建Map集合中所有key对象的集合
        for(String c:set){    //遍历集合
            System.out.println(c);
        }

        Collection<String>coll=map.values();//构建Map集合所有values对象集合
        for(String c:coll){
            System.out.println(c);
        }
    }
}