Java集合详解

目录

一、集合概述

二、Collection

Collection讲解

Iterator迭代器

List用法

ListIterator列表迭代器

ArrayList

LinkedList

Set用法

哈希值概念

常用的实现类

HashSet

TreeSet

三、Map

Map讲解

Map的遍历

四、Collections工具


一、集合概述

首先,了解什么是集合?一般来说,我们的Java程序需要根据程序运行时才知道创建了多少个对象,非运行状态时,我们根本不知道要创建多少个对象。为了满足这些常规的编程需要,我们要求能在任何时候都能创建任意数量的对象,而这些对象用什么来存储呢?没错,就是集合

Java集合类存放在java.util包中,是一个用来存放对象的容器。

常规来看,大概就下图所展示的一个结构。img

其中蓝色的为实现类,红色的为接口类。

二、Collection

Collection讲解

Collection接口是Java集合类的顶级接口之一。其常用方法有以下这些:img

代码讲解:

public class Test {
    public static void main(String[] args) {
​
        Collection collection = new ArrayList();
        for (int i = 0; i < 5 ; i++) {
            // 循环添加元素
            collection.add(i);
        }
        System.out.println(collection);
​
        // remove() 移除指定元素
        collection.remove(2);
        System.out.println(collection);
​
        // contains() 判断是否存在指定元素
        System.out.println(collection.contains(5));
​
        // size() 获取集合元素个数
        System.out.println(collection.size());
​
        // clear() 清空元素
        collection.clear();
​
        // isEmpty()
        System.out.println(collection.isEmpty());
​
    }
}

运行结果:

img

Iterator迭代器

集合专用

常用方法:

Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到

E next()返回迭代中的下一个元素

boolean hasNext()如果迭代具有更多元素,则返回true

代码实现:

public class Test {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        for (int i = 0; i < 5 ; i++) {
            collection.add(i);
        }
        Iterator iterator = collection.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next() + " ");
        }
​
    }
}

运行结果:

img

List用法

List集合也是一个接口,它继承了Collection接口。

List集合的特点

A、有序集合(也称序列)用户可以精确控制列表的每一个元素的位置插入,用户可以通过整数索· 引访问元素,并搜索列表中的元素

B、与set集合不同,列表通常允许重复的元素。

List的常用方法:img

代码实现:

public class Test {
    public static void main(String[] args) {
​
        List list = new ArrayList();
        for (int i = 0; i < 5 ; i++) {
            // 循环添加元素
            list.add(i);
        }
        serch(list);
        // 在指定位置添加元素
        list.add(2,15);
        serch(list);
        // 移除指定索引元素
        list.remove(3);
        serch(list);
        // 根据索引修改值
        list.set(1,10);
        serch(list);
        // 获取索引元素
        System.out.println(list.get(3));
    }
    public static void serch(List list){
        for (int i = 0; i < list.size() ; i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
    }
}

运行结果:

img

ListIterator列表迭代器

(List专用),可向任一方向迭代。

常用方法:img

代码实现:

​
public class Test {
    public static void main(String[] args) {
​
        List list = new ArrayList();
        for (int i = 0; i < 5 ; i++) {
            // 循环添加元素
            list.add(i);
        }
        // ListIterator 遍历
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            System.out.print(listIterator.next() + " ");
        }
        System.out.println();
        // 倒序遍历
        while (listIterator.hasPrevious()){
            System.out.print(listIterator.previous() + " ");
        }
    }
}


​

List集合的常用实现类:

ArrayList

ArrayList:底层数据结构是数组,查询快,增删慢

LinkedList

LinkedList:底层数据结构是链表,查询慢,增删快

Set用法

Set也是一个接口,它和List一样继承了Collection接口,但不一样的是,它的元素无序,即不能依靠索引值进行访问元素,所以要用forEach进行遍历;并且Set与List的区别还有元素的不可重复性,在Set中每个元素都是唯一的。

哈希值概念

img

常用的实现类

HashSet

特点:

(1)底层数据结构是哈希表

(2)元素无序,不可以索引访问

(3)元素不可重复

TreeSet

特点:

(1)与HashSet不一样,元素是有序的,但还是没有带索引的方法。

TreeSet(), 根据其元素的自然顺序进行排序

TreeSet(Comparator<? super E> comparator) :根据指定的比较器进行排序

(2)元素不可重复

TreeSet的排序实现:

public class Test1 {
    public static void main(String[] args) {
​
        // 自然排序
        TreeSet<Integer> set = new TreeSet<Integer>(){{
            add(5);
            add(6);
            add(1);
            add(2);
        }};
        for (Integer i : set){
            System.out.print(i + " ");
        }
        System.out.println();
        // 比较器排序
        TreeSet<Integer> set1 = new TreeSet<Integer>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        }){{
            add(5);
            add(6);
            add(1);
            add(2);
        }};
        for (Integer i : set1){
            System.out.print(i + " ");
        }
​
    }
}

运行结果:img

三、Map

Map讲解

Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。但键是具有唯一性的

常用方法:img

Map的遍历

public class Test {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<String, Integer>(){{
            put("张三",22);
            put("李四",20);
            put("王五",21);
        }};
        /*
        第一种遍历方法
        1、通过keySet()方法返回一个键的集合
        2、遍历这个集合,依次用get()方法获取值
        */    
        Set<String> set = map.keySet();
        for (String s : set){
            System.out.println(s + " " + map.get(s));
        }
        System.out.println("-----------");
        /* 
        第二种遍历方法
        1、通过entrySet()方法获取一个键值对对象
        2、用getKey()和geyValue()方法分别获取值和键
         */
        for (Map.Entry<String,Integer> entry : map.entrySet()){
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
}

四、Collections工具

Collections是一个针对集合进行操作的工具类,提供的常用方法有:

​
public class Test1 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>(){{
            add(2);
            add(5);
            add(1);
            add(7);
            add(3);
        }};
        for (Integer i : list) System.out.print(i + " ");
        System.out.println();
        // sort 排序
        Collections.sort(list);
        for (Integer i : list) System.out.print(i + " ");
        System.out.println();
        // reverse 反转
        Collections.reverse(list);
        for (Integer i : list) System.out.print(i + " ");
        System.out.println();
        // shuffle 随机排列
        Collections.shuffle(list);
        for (Integer i : list) System.out.print(i + " ");
    }
}


​

运行结果:img

这次的分享就暂时到这里,如有错误的地方请多多支出,谢谢您的阅读。

                                      img

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值